#include using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll N, M, L, S, E; cin >> N >> M >> L >> S >> E; vector>> g(N); for(ll i = 0, u, v, w; i < M; i++) { cin >> u >> v >> w; u--, v--; g[u].emplace_back(v, w); g[v].emplace_back(u, w); } vector T(L); for(auto &i : T) { cin >> i; i--; } auto Dijkstra = [&](ll s) { auto chmin = [&](auto &a, const auto &b) { return a > b ? (a = b, true) : false; }; vector d(N, 1e18); d[s] = 0; priority_queue, vector>, greater>> q; q.emplace(0, s); while(!q.empty()) { auto [tmp, v] = q.top(); q.pop(); if(tmp > d[v]) { continue; } for(auto &[nv, c] : g[v]) { if(chmin(d[nv], d[v] + c)) { q.emplace(d[nv], nv); } } } return d; }; vector d1 = Dijkstra(0), d2 = Dijkstra(N - 1); ll ans = 1e18; for(auto &i : T) { if(d1[i] >= S + E) { continue; } if(d1[i] < S) { d1[i] = S; } ans = min(ans, d1[i] + d2[i] + 1); } cout << (ans > 1e17 ? -1 : ans) << "\n"; }