#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF=1<<30;
int e[1010][1010];
bool vis[1010];
int dis[1010];
int t,s,d,n;
void dijkstra()
{
memset(vis,0,sizeof vis);
for(int i=0;i<=n;i++) dis[i]=e[0][i];
vis[0]=1;
for(int i=1;i<=n;i++)
{
int minn=INF,u=0;
for(int j=1;j<=n;j++)
if(!vis[j]&&minn>dis[j]) u=j,minn=dis[j];
vis[u]=true;
for(int j=1;j<=n;j++)
dis[j]=min(dis[j],dis[u]+e[u][j]);
}
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
while(cin>>t>>s>>d)
{
memset(e,0x3f,sizeof e);
while(t--)
{
int a,b,c;
cin>>a>>b>>c;
n=max(max(n,a),b);
if(c<e[a][b]) e[a][b]=e[b][a]=c;
}
int minn=INF,x;
for(int i=1;i<=s;i++)
{
cin>>x;
e[0][x]=e[x][0]=0;
}
dijkstra();
for(int i=1;i<=d;i++)
{
cin>>x;
minn=min(minn,dis[x]);
}
cout<<minn<<endl;
}
return 0;
}