from collections import defaultdict
from heapq import heappush, heappop

INF = 1 << 60
N, M, P, Y = map(int, input().split())
adj = defaultdict(list)
for _ in range(M):
    A, B, C = map(int, input().split())
    A -= 1
    B -= 1
    adj[A].append((B, C))
    adj[B].append((A, C))

shops = []
for _ in range(P):
    D, E = map(int, input().split())
    D -= 1
    shops.append((D, E))


# 頂点 start から各頂点までのコスト(費用)
def dijkstra(start):
    q = [(0, start)]
    dists = [INF] * N
    while q:
        d, v = heappop(q)
        if dists[v] <= d: continue
        dists[v] = d

        for to, cost in adj[v]:
            c = dists[v] + cost
            if dists[to] <= c: continue
            heappush(q, (c, to))

    return dists


dists = dijkstra(0)
ans = 0
for d, e in shops:
    m = max(0, Y - dists[d])
    ans = max(ans, m // e)

print(ans)