#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(a) begin(a) end(a)
#define rep(i,a,b) for(ll i = a; i < (b); i++)
const ll INF = 1e18;

int main(){
    ll n,m,p,y;
    cin >> n >> m >> p >> y;
    vector<vector<array<ll,2>>> g(n);
    rep(i,0,m){
        ll a,b,c;
        cin >> a >> b >> c;
        a--,b--;
        g[a].push_back({b,c});
        g[b].push_back({a,c});
    }

    priority_queue<array<ll,2>, vector<array<ll,2>>, greater<array<ll,2>>> pq;
    pq.push({0,0});
    vector<ll> dist(n, INF);
    dist[0] = 0;
    while(pq.size()){
        auto[cost, now] = pq.top();
        pq.pop();
        if(cost != dist[now]) continue;
        for(auto [to, c]: g[now]){
            if(dist[to] > cost + c){
                dist[to] = cost + c;
                pq.push({dist[to], to});
            }
        }
    }

    ll ans = 0;
    rep(i,0,p) {
        ll d,e;
        cin >> d >> e;
        d--;
        ll mx = max(0LL, y - dist[d]);
        ans = max(ans, mx / e);
    }
    cout << ans << endl;
}