#出典:https://atcoder.jp/contests/abc362/submissions/55346606 from heapq import * def dijkstra(G, s): INF = 10**18 dist = [INF] * len(G) dist[s] = 0 pq = [(0, s)] while pq: d, v = heappop(pq) if d > dist[v]: continue for u, weight in G[v]: nd = d + weight if dist[u] > nd: dist[u] = nd heappush(pq, (nd, u)) return dist N,M,P,Y=map(int,input().split()) g=[[] for i in range(N)] for i in range(M): A,B,C=map(int,input().split()) g[A-1].append([B-1,C]) g[B-1].append([A-1,C]) shops=[10**18 for i in range(N)] for i in range(P): D,E=map(int,input().split()) shops[D-1]=E dist=dijkstra(g,0) #print(dist) #print(shops) ans=0 for i in range(N): #各街について、所持金はY-dist[i] #print(Y-dist[i],shops[i]) #print((Y-dist[i])//shops[i]) ans=max(ans,(Y-dist[i])//shops[i]) print(ans)