#include <cstdio>
#include <queue>
#include <utility>
#include <algorithm>
using namespace std;
#define INF (1<<27)
typedef pair<int,int> P;
int d[3000];
int c[3000][3000];
int N,M,K;
int main() {
	scanf("%d%d%d",&N,&M,&K);
	fill(c[0],c[0]+3000*3000,INF);
	for(int i=0;i<M;i++) {
		int a,b,l;
		scanf("%d%d%d",&a,&b,&l);
		c[a-1][b-1]=c[b-1][a-1]=l;
	}
	fill(d,d+3000,INF);
	for(int i=0;i<K;i++) {
		int s;
		scanf("%d",&s);
		d[s-1]=0;
		priority_queue<P,vector<P>,greater<P> > que;
		que.push(P(0,s-1));
		while(!que.empty()) {
			P p=que.top();que.pop();
			if(d[p.second]<p.first)continue;
			for(int j=0;j<N;j++) {
				if(d[j]>(p.first+c[p.second][j])) {
					d[j]=p.first+c[p.second][j];
					que.push(P(d[j],j));
				}
			}
		}
	}
	int ans=0;
	for(int i=0;i<N;i++)for(int j=0;j<N;j++) {
		if(c[i][j]==INF)continue;
		ans=max(ans,(d[i]+d[j]+c[i][j]+1)/2);
	}
	printf("%d\n",ans);
}