#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[1600][1600]; bool flag[900]; int dis[900]; int w[1600][1600]; int b[900]; int num[1600]; int que[1600]; int maxx=0x7ffffff/3; int main() { int n,p,q; scanf("%d%d%d",&n,&p,&q); for(int i=1;i<=n;i++) scanf("%d",&b[i]); int x,y,z; for(int i=1;i<=q;i++) { scanf("%d%d%d",&x,&y,&z); w[x][y]=w[y][x]=z; a[x][++num[x]]=y; a[y][++num[y]]=x; } int minn=0x7ffffff; for(int i=1;i<=p;i++) { int h=0,t=1; int ans=0; memset(que,0,sizeof(que)); memset(flag,0,sizeof(flag)); for(int j=1;j<=p;j++) dis[j]=maxx; dis[i]=0; flag[i]=1; que[t]=i; do { h++; h=(h-1)00+1; int u=que[h]; flag[u]=0; for(int j=1;j<=num[u];j++) { if(dis[u]+w[u][a[u][j]]<dis[a[u][j]]) { dis[a[u][j]]=dis[u]+w[u][a[u][j]]; { if(flag[a[u][j]]==0) { t++; t=(t-1)00+1; que[t]=a[u][j]; flag[a[u][j]]=1; } } } } }while(h!=t); for(int j=1;j<=n;j++) ans+=dis[b[j]]; minn=min(ans,minn); } printf("%d",minn); return 0; }