import heapq def dijkstra(graph, start=0): num_node = len(graph) inf = float('inf') distances = [inf] * num_node distances[start] = 0 pq = [(0, start)] while pq: current_distance, current_node = heapq.heappop(pq) if current_distance > distances[current_node]: continue for neighbor, weight in graph[current_node]: distance = current_distance + weight if distance < distances[neighbor]: distances[neighbor] = distance heapq.heappush(pq, (distance, neighbor)) return distances n,m,p,y=map(int,input().split()) a=[[]for _ in range(n)] for i in range(m): s,t,u=map(int,input().split()) a[s-1].append((t-1,u)) a[t-1].append((s-1,u)) b=[-1 for i in range(n)] for i in range(p): s,t=map(int,input().split()) b[s-1]=t x=dijkstra(a) ans=0 for i in range(n): if b[i]!=-1: ans=max(ans,max(0,y-x[i])//b[i]) print(ans)