# 『重みあり』の無向グラフの最短経路長問題 # # ヒープを用いたダイクストラ法 import heapq N, M, P, Y = map(int, input().split()) G = [[] for _ in range(N + 1)] # 先頭はダミー (頂点 1 ~ 頂点 N) for _ in range(M): u, v, c = map(int, input().split()) G[u].append((v, c)) G[v].append((u, c)) # 始点(頂点1)から各頂点への最小コストを保存する配列 (-1 は未訪問 ) dist = [-1 for _ in range(N + 1)] dist[1] = 0 # ダイクストラ法で使うヒープ Q = [] # 始点となる頂点1をヒープに追加 ( その頂点まで行くのに要する暫定最小コスト, 頂点番号 ) として追加する heapq.heappush(Q, (0, 1)) # ヒープから取り出したことがあるかを保存する配列 done = [False for _ in range(N + 1)] # ダイクストラ法で各頂点への最小コストを求める while Q: cost, from_id = heapq.heappop(Q) # 既にヒープから取り出したことがあればスキップ if done[from_id]: continue done[from_id] = True for to_id, path_cost in G[from_id]: # 探索先が未訪問か, あるいは訪問済みでも最短コストを更新できるなら更新! if dist[to_id] == -1 or dist[to_id] > dist[from_id] + path_cost: dist[to_id] = dist[from_id] + path_cost heapq.heappush(Q, (dist[to_id], to_id)) shopId_cost = {} for _ in range(P): D, E = map(int, input().split()) shopId_cost[D] = E ans = 0 for i in range(1, N + 1): if i in shopId_cost: cost = shopId_cost[i] # ハチマキの値段 if dist[i] != -1: have_money = Y - dist[i] if have_money <= 0: continue tmp_ans = have_money // cost ans = max(ans, tmp_ans) print(ans)