#include #include #include #include namespace mp = boost::multiprecision; using Bint = mp::cpp_int; using namespace std; using namespace atcoder; #define rep(i, n) for(int i=0;i<(n);++i) #define rep1(i, n) for(int i=1;i<=(n);i++) #define ll long long using mint = modint998244353; using P = pair; using lb = long double; using T = tuple; #ifdef LOCAL # include # define dbg(...) debug_print::multi_print(#__VA_ARGS__, __VA_ARGS__) #else # define dbg(...) (static_cast(0)) #endif int main() { ll n, m, p, y; cin >> n >> m >> p >> y; vector> g(n); rep(i,m) { int a, b, c; cin >> a >> b >> c; --a;--b; g[a].emplace_back(b,c); g[b].emplace_back(a,c); } vector d(p), e(p); rep(i,p) cin >> d[i] >> e[i]; rep(i,p)--d[i]; vector dist(n, 1e18); dist[0] = 0; priority_queue, greater

> pq; pq.emplace(dist[0], 0); while(!pq.empty()) { auto [D, i] = pq.top();pq.pop(); if(D!=dist[i]) continue; for(auto [v, cost] : g[i]) { if(dist[v]>dist[i]+cost) { dist[v] = dist[i] + cost; pq.emplace(dist[v], v); } } } ll ans = 0; rep(i,p) { ll ret = max(0ll, y-dist[d[i]]); ans = max(ans, ret/e[i]); } cout << ans << endl; return 0; }