#include using namespace std; int main() { int n = 0,m = 0,p = 0; long long y = 0; cin >> n >> m >> p >> y; auto cmp = [](pair a,pair b) { return a.second < b.second; }; priority_queue,vector>,decltype(cmp)> q(cmp); q.push(pair{0,y}); vector>> graph(n,vector>{}); for (int i = 0;i < m;i++) { int a = 0,b = 0; long long c = 0; cin >> a >> b >> c; a--; b--; graph[a].push_back(pair{b,c}); graph[b].push_back(pair{a,c}); } vector price(n,LLONG_MAX); for (int i = 0;i < p;i++) { int d = 0; long long e = 0; cin >> d >> e; d--; price[d] = e; } vector c(n,true); long long ans = 0; while (q.size() != 0) { pair temp = q.top(); q.pop(); if (c[temp.first]) { //cout << temp.first << " " << temp.second << endl; c[temp.first] = false; ans = max(ans,temp.second / price[temp.first]); for (pair i : graph[temp.first]) { q.push(pair{i.first,max((long long)0,temp.second - i.second)}); } } } cout << ans << endl; }