#include #include using namespace std; using namespace atcoder; using ll = long long; template inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; } ll inf_ll = 9223372036854775807; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) using mint = atcoder::modint998244353; using mint1 = atcoder::modint1000000007; using Pa = std::pair; int Yes(bool x){ if(x) cout << "Yes"; else cout << "No"; cout << endl; return 0; } int main(){ ll N, M, P, Y; cin >> N >> M >> P >> Y; vector> G(N); rep(i, M){ ll a, b, c; cin >> a >> b >> c; a--; b--; G[a].push_back({c, b}); G[b].push_back({c, a}); } vector A(N, inf_ll); rep(i, P){ ll d, e; cin >> d >> e; d--; A[d] = e; } vector B(N, inf_ll); priority_queue, greater> Q; B[0] = 0; Q.push({0, 0}); while(!Q.empty()){ auto [x, y] = Q.top(); Q.pop(); for(auto [i, j] : G[y]){ if(B[j] > x+i){ B[j] = x+i; Q.push({x+i, j}); } } } ll ans = 0; rep(i, N){ chmax(ans, (Y - B[i]) / A[i]); } cout << ans; }