#include using namespace std; vector dijkstra(vector>> G,int v){ vector kakutei((int)(G.size()),false); vector cur((int)(G.size()),2000000000000LL); priority_queue,vector>,greater>> que; cur[v]=0; que.push(make_pair(cur[v],v)); while(!que.empty()){ int pos=que.top().second; que.pop(); if(kakutei[pos]==true){ continue; } kakutei[pos]=true; for(pair i : G[pos]){ int nex=i.first; long long cost=i.second; if(cur[nex]>cur[pos]+cost){ cur[nex]=cur[pos]+cost; que.push(make_pair(cur[nex],nex)); } } } return cur; } int main(){ int N,M,L; long long S,E; cin >> N >> M >> L >> S >> E; vector>> G(N); for(int i=0;i> a >> b >> t; a--; b--; G[a].push_back(make_pair(b,t)); G[b].push_back(make_pair(a,t)); } vector dist1=dijkstra(G,0); vector dist2=dijkstra(G,N-1); long long ans=2000000000000LL; for(;L--;){ int t; cin >> t; t--; long long d=dist1[t]; if(d>=S+E){ continue; } d=max(d,S); d+=dist2[t]+1; ans=min(ans,d); } if(ans==2000000000000){ cout << -1 << endl; return 0; } cout << ans << endl; }