/*
分析:
最短路,水~
把图反向就行了。
2012-06-05
*/
#include"stdio.h"
struct A
{
int ans;
int flag;
int pre;
}E[1011];
int map[1001][1001];
int main()
{
int n,m;
int num,s[1001],e;
int i,l;
int a,b,t;
int k;
int ans;
while(scanf("%d%d%d",&n,&m,&e)!=-1)
{
for(i=1;i<=n;i++)
for(l=1;l<=n;l++)
{
if(i==l)map[i][l]=0;
else map[i][l]=11111111;
}
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&t);
map[b][a]=map[b][a]>t?t:map[b][a];
}
scanf("%d",&num);
for(i=1;i<=num;i++) scanf("%d",&s[i]);
for(i=1;i<=n;i++)
{
E[i].ans=11111111;
E[i].flag=1;
E[i].pre=i;
}
k=e;
E[k].ans=0;
while(k)
{
E[k].flag=0;
for(i=1;i<=n;i++)
{
if(map[k][i]==11111111) continue;
if(E[k].ans+map[k][i]<E[i].ans)
{
E[i].ans=E[k].ans+map[k][i];
E[i].pre=k;
}
}
k=0;
for(i=1;i<=n;i++) if(E[i].flag) {k=i;break;}
for(i++;i<=n;i++) if(E[i].flag&&E[i].ans<E[k].ans) k=i;
}
ans=11111111;
for(i=1;i<=num;i++) ans=ans>E[s[i]].ans?E[s[i]].ans:ans;
if(ans==11111111) printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}