from heapq import * N, M, P, Q, T = map(int, input().split()) UV = [list(map(int, input().split())) for _ in range(M)] E = [[] for _ in range(N)] P -= 1 Q -= 1 for u, v, c in UV: u -= 1 v -= 1 E[u].append((v, c)) E[v].append((u, c)) INF = 10 ** 13 # N * maxコストくらいで設定 # 普通のダイクストラ def dijkstra(x): D = [INF] * N D[x] = 0 q = [(0, x)] while q: d, u = heappop(q) # 下のifでTLE解消することがある if d > D[u]: continue for i in E[u]: a, b = i if D[a] > D[u] + b: D[a] = D[u] + b heappush(q, (D[a], a)) return D D0 = dijkstra(0) DP = dijkstra(P) DQ = dijkstra(Q) d0p = D0[P] d0q = D0[Q] dpq = DP[Q] if d0p + d0q + dpq <= T: print(T) exit() ans = -1 for x in range(N): d0x = D0[x] dxp = DP[x] dxq = DQ[x] for y in range(x, N): d0y = D0[y] dyp = DP[y] dyq = DQ[y] mdi = max(dxp + dyp, dxq + dyq) if d0x + d0y + mdi <= T: ans = max(ans, T - mdi) print(ans)