#int(input()) #map(int, input().split()) #list(map(int, input().split())) N, M, X = map(int, input().split()) to = [[] for i in range(N)] for i in range(M): u, v, a, b = map(int, input().split()) to[u-1].append((v-1, a, b)) to[v-1].append((u-1, a, b)) import heapq min1 = -1 max1 = 10 ** 9 + 10 while max1 - min1 > 1: h = (max1 + min1) // 2 v = [X+1] * N q = [(0, 0)] heapq.heapify(q) while q: t, x = heapq.heappop(q) if v[x] < t: continue for y, a, b in to[x]: if h > b: continue if v[y] < t+a or t+a > X: continue heapq.heappush(q, (t+a, y)) v[y] = t+a if max(v) == X+1: max1 = h else: min1 = h if min1 == -1: print(-1) else: print(min1)