#include #include #include using namespace std; #define rep(i,n) for(int i=0;i<(n);++i) using pl=pair; const long INF=3e18+100; int main(){ int N,M,P; long Y; cin>>N>>M>>P>>Y; vector>G(N); rep(i,M){ int a,b,c; cin>>a>>b>>c; a--;b--; G[a].push_back(make_pair(b,c)); G[b].push_back(make_pair(a,c)); } vector d(N,INF); priority_queue,greater> pq; pq.push(make_pair(0,0)); d[0]=0; while(!pq.empty()){ auto [x,v]=pq.top(); if(x>d[v]) continue; for(auto [to,cost]:G[v]){ if(d[to]<=x+cost) continue; d[to]=x+cost; pq.push(make_pair(d[to],to)); } } long ans=0; rep(i,P){ long D,E; cin>>D>>E; D--; ans=max(ans, (Y-d[D])/E); } cout<