import heapq N,M,X = map(int,input().split()) G = {i:[] for i in range(1,N+1)} for _ in range(M): u,v,c,t = map(int,input().split()) G[u].append((v,c,t)) G[v].append((u,c,t)) INFTY = 10**12 ans = INFTY high = INFTY low = 0 while high-low>1: mid = (high+low)//2 dist = [INFTY]*(N+1) visit = [0]*(N+1) k = (mid+X-1)//X que = [(k,1,k*X)] dist[1] = k while que: t,v,c = heapq.heappop(que) if t>dist[v]:continue visit[v] = 1 for u,dc,dt in G[v]: if visit[u]==1:continue if c>=dc: nc = c-dc nt = t+dt if nt