from heapq import heappush, heappop from scipy.sparse.csgraph import shortest_path from scipy.sparse import lil_matrix N, M, P, Q, T = map(int, input().split()) P -= 1 Q -= 1 edges = lil_matrix((N, N), dtype=int) for _ in range(M): fr, to, cost = map(int, input().split()) fr -= 1 to -= 1 edges[fr, to] = cost edges[to, fr] = cost def minDist(s): que = [(0, s)] dist = [float('inf')] * N dist[s] = 0 while que: d, now = heappop(que) for (_, to), cost in edges.getrow(now).todok().items(): nd = d + cost if dist[to] > nd: dist[to] = nd heappush(que, (nd, to)) return dist minDistS = minDist(0) minDistP = minDist(P) minDistQ = minDist(Q) ans = -1 if minDistS[P] + minDistP[Q] + minDistQ[0] <= T or minDistS[Q] + minDistQ[P] + minDistQ[0] <= T: ans = T for mid in range(N): time = minDistS[mid] * 2 + max(minDistP[mid], minDistQ[mid]) * 2 if time <= T: ans = max(ans, (T - time) + minDistS[mid] * 2) print(ans)