1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 #include<queue>
6 using namespace std;
7 const int MAXN=4001;
8 const int maxn=0x3f;
9 void read(int &n)
10 {
11 char c='+';int x=0;bool flag=0;
12 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
13 while(c>='0'&&c<='9')
14 x=(x<<1)+(x<<3)+c-48,c=getchar();
15 flag==1?n=-x:n=x;
16 }
17 int n,m,k;
18 struct node
19 {
20 int have;
21 int need;
22 int pos;
23 }a[MAXN];
24 int map[MAXN][MAXN];
25 int dis[MAXN][MAXN];
26 int comp(const node &a,const node &b)
27 {
28 if(a.have==b.have)
29 return a.need<b.need;
30 else
31 return a.have>b.have;
32 }
33 int main()
34 {
35 read(n);read(m);read(k);
36 int num=k;
37 for(int i=1;i<=k;i++)
38 {
39 int p;
40 read(p);
41 a[p].have=1;
42 a[i].pos=i;
43 }
44 memset(map,maxn,sizeof(map));
45 for(int i=1;i<=m;i++)
46 {
47 int x,y,z;
48 read(x);read(y);read(z);
49 map[x][y]=z;
50 map[y][x]=z;
51 }
52
53 for(int i=1;i<=n;i++)
54 map[i][i]=0;
55
56 for(int k=1;k<=n;k++)
57 for(int i=1;i<=n;i++)
58 for(int j=1;j<=n;j++)
59 if(map[i][j]<maxn)
60 map[i][j]=max(map[i][j],min(map[i][k],map[k][j]));
61 else
62 map[i][j]=min(map[i][k],map[k][j]);
63
64 for(int i=1;i<=n;i++)
65 if(a[i].have)
66 a[i].need=map[1][i];
67
68
69 sort(a+1,a+n+1,comp);
70
71 int now=0;
72 int flag=0;
73 for(int i=1;i<=num;i++)
74 {
75 // if(a[i].have==0)break;
76 if(a[i].have&&a[i].pos==1)
77 {
78 flag=1;
79 continue;
80 }
81 if(a[i].need>now)
82 now++;
83
84 }
85 if(flag==1)
86 now++;
87 printf("%d",now);
88 return 0;
89 }