#include #include #include #include using namespace std; using ll = long long; using Graph = vector>>; using pli = pair; const ll INF = 1LL<<60; Graph G(200010); ll F[200010]; void Dijkstra(int src){ fill(&F[0], &F[0]+200010, INF); F[src] = 0; priority_queue, greater> Q; Q.push({0, src}); while(! Q.empty()){ auto [cost, cur] = Q.top(); Q.pop(); if (cost>F[cur]) continue; for (auto [dst, money]: G[cur]){ if (cost+money>N>>M>>P>>Y; for (int i=0;i>A>>B>>C; G[A].push_back({B, C}); G[B].push_back({A, C}); } Dijkstra(1); ll ans = -1; for (int i=0;i>D>>E; if (F[D]==INF || F[D]>Y) continue; ans = max(ans, (Y-F[D])/E); } cout << ans << "\n"; }