import sys input = sys.stdin.readline def dijkstra(G, s): from heapq import heappush, heappop INF = 10**18 dist = [INF] * len(G) dist[s] = 0 pq = [(0, s)] while pq: d, v = heappop(pq) if d > dist[v]: continue for u, weight in G[v]: nd = d + weight if dist[u] > nd: dist[u] = nd heappush(pq, (nd, u)) return dist N, M, X = map(int, input().split()) edges = [] for _ in range(M): u, v, a, b = map(int, input().split()) u -= 1 v -= 1 edges.append((u, v, a, b)) lb, ub = -1, 10**10 while ub - lb > 1: m = (lb + ub) // 2 G = [[]for _ in range(N)] for u, v, a, b in edges: if b >= m: G[u].append((v, a)) G[v].append((u, a)) dist = dijkstra(G, 0) if dist[N-1] <= X: lb = m else: ub = m print(lb)