n, m, p, y = map(int, input().split()) ABC = [tuple(map(int, input().split())) for _ in range(m)] node = [[] for _ in range(n)] for i in range(m): u, v, c = ABC[i] u, v = u-1, v-1 node[u].append((v, c)) node[v].append((u, c)) def dijk(start = 0): from heapq import heappop, heappush D = [float("INF") for _ in range(n)] hq = [] heappush(hq, (0, start)) D[start] = 0 while hq: dist, now = heappop(hq) if D[now] < dist: continue for nxt, d in node[now]: if D[nxt] > D[now] + d: D[nxt] = D[now] + d heappush(hq, (D[nxt], nxt)) return D D = dijk() ans = 0 for i in range(p): d, e = map(int, input().split()) ans = max(ans, (y - D[d-1]) // e) print(ans)