from heapq import * n, m, p, q, t = map(int, input().split()) p -= 1 q -= 1 edges = [[] for _ in range(n)] for _ in range(m): u, v, c = map(int, input().split()) u -= 1 v -= 1 edges[u].append((v, c)) edges[v].append((u, c)) def dijkstra(s): inf = 1 << 60 dist = [inf] * n dist[s] = 0 hq = [s] while hq: tmp = heappop(hq) d = tmp // n pos = tmp - d * n if dist[pos] < d: continue for npos, c in edges[pos]: tmp = c + d if dist[npos] > tmp: dist[npos] = tmp heappush(hq, (tmp * n + npos)) return dist d0 = dijkstra(0) dp = dijkstra(p) dq = dijkstra(q) if d0[p] + dp[q] + dq[0] <= t: print(t) elif max(d0[p] * 2, d0[q] * 2) > t: print(-1) else: ans = 0 for i in range(n): for j in range(n): d = d0[i] + d0[j] d1 = max(dp[i] + dp[j], dq[i] + dq[j]) if d + d1 <= t: ans = max(ans, t - d1) print(ans)