#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1e3+5;
int g[maxn][maxn],vis[maxn],dir[maxn];
int main(){
int T,S,D,a,b,x,s,t;
while(~scanf("%d%d%d",&T,&S,&D)){
memset(vis,1,sizeof(vis));
memset(dir,inf,sizeof(dir));
memset(g,inf,sizeof(g));
while(T--){
scanf("%d%d%d",&a,&b,&x);
g[a][b]=min(g[a][b],x);
g[b][a]=g[a][b];
}
while(S--){
scanf("%d",&x);
g[0][x]=g[x][0]=0;
}
s=0;t=maxn-1;
while(D--){
scanf("%d",&x);
g[t][x]=g[x][t]=0;
}
dir[s]=0;vis[s]=0;
while(s!=t){
int minn=inf,nex;
for(int i=1;i<=maxn-1;i++){
if(g[s][i]!=inf){
dir[i]=min(dir[i],dir[s]+g[s][i]);
}
if(dir[i]<minn&&vis[i]){
minn=dir[i];
nex=i;
}
}
if(minn==inf)break;
s=nex;
vis[s]=0;
}
printf("%d\n",dir[t]);
}
}