#include<iostream>
#include<cstdio>
using namespace std;
int n,m,K,f[1<<14][15],ans,dis[110][110],id[15];
int main(){
scanf("%d%d%d",&n,&m,&K);//M条双向通道,K个洞室,里面放有1捆干草
for(int i=1;i<=K;i++)scanf("%d",&id[i]);
int x,y,z;
for(int i=1;i<=n;i++)dis[i][i]=0x3f3f3f3f;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
dis[x][y]=dis[y][x]=z;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&i!=k&&j!=k){
if(dis[i][j]!=0x3f3f3f3f)dis[i][j]=max(dis[i][j],min(dis[i][k],dis[k][j]));
else dis[i][j]=min(dis[i][k],dis[k][j]);
}
int N=(1<<K);
for(int i=1;i<=K;i++)f[(1<<(i-1))][i]=1;
for(int s=1;s<N;s++){
int num=0;
for(int i=1;i<=K;i++)if(s&(1<<(i-1)))num++;
for(int i=1;i<=K;i++)
if(s&(1<<(i-1)))
for(int j=1;j<=K;j++)
if((!(s&(1<<(j-1))))&&num<=dis[id[i]][id[j]])f[s^(1<<(j-1))][j]|=f[s][i];
for(int i=1;i<=K;i++)
if((s&(1<<(i-1)))&&f[s][i])
ans=max(ans,min(dis[id[i]][1],num));
}
printf("%d",ans);
}