from collections import deque import sys # 入力を高速化 input = sys.stdin.read def bfs(start, N, G, Y): dist = [-1] * (N + 1) dist[start] = Y que = deque([start]) while que: pos = que.popleft() for to, cost in G[pos]: if dist[pos] >= cost and dist[pos] - cost > dist[to]: dist[to] = dist[pos] - cost que.append(to) return dist def main(): # 入力 data = input().splitlines() N, M, P, Y = map(int, data[0].split()) # グラフの初期化 G = [[] for _ in range(N + 1)] edge_set = set() idx = 1 for i in range(M): a, b, c = map(int, data[idx].split()) G[a].append((b, c)) G[b].append((a, c)) edge_set.add((a, b)) idx += 1 # BFSの実行 ret = bfs(1, N, G, Y) # 結果の計算 ans = 0 visited = set() for i in range(P): d, e = map(int, data[idx].split()) visited.add(d) ans = max(ans, ret[d] // e) idx += 1 # 結果を出力 print(ans) if __name__ == "__main__": main()