设置一个虚点;
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int _max = 0x3f3f3f3f;
const int maxn = 1111;
int map[maxn][maxn];
bool visit[maxn];
int dist[maxn];
int T, S, D;
void inint()
{
for(int i = 0; i < maxn; i++)
for(int j = 0; j< maxn; j++)
map[i][j] = _max;
}
void input()
{
for(int i = 1; i <= T; i++)
{
int u, v, w;
scanf("%d%d%d", &u,&v,&w);
if(map[u][v]>w) map[u][v] = map[v][u] = w;
}
for(int i = 1; i <= S; i++)
{
int a;
scanf("%d", &a);
map[0][a] = map[a][0] = 0;
}
}
void SPFA()
{
queue<int>q;
memset(visit, false, sizeof(visit));
for(int i = 0; i < maxn; i++)
dist[i] = _max;
dist[0] = 0;
visit[0] = true;
q.push(0);
while(!q.empty())
{
int cur = q.front();
q.pop();
visit[cur] = false;
for(int i = 0; i < maxn; i++)
{
if(dist[i]>dist[cur]+map[cur][i])
{
dist[i] = dist[cur]+map[cur][i];
if(!visit[i])
{
q.push(i);
visit[i] = true;
}
}
}
}
}
void output()
{
int sum = _max;
int h;
for(int i = 1; i <= D; i++)
{
scanf("%d", &h);
if(sum > dist[h])
sum = dist[h];
//cout << dist[h] << " ";
}
printf("%d\n", sum);
}
int main()
{
while(scanf("%d%d%d", &T,&S,&D)!=EOF)
{
inint();
input();
SPFA();
output();
}
}