import heapq N,M,X = list(map(int,input().split())) edge = [[] for _ in range(N)] for _ in range(M): u,v,c,t = list(map(int,input().split())) u -= 1;v -= 1 edge[u].append((v,c,t)) edge[v].append((u,c,t)) q = [(0,0,0,0)] INF = 10**18 visited = [INF] * N while(q): v,time,money,now = heapq.heappop(q) if(visited[now] <= v):continue visited[now] = v for u,c,t in edge[now]: next_time = time + t next_money = money + c next_v = next_time + -(-next_money//X) heapq.heappush(q,(next_v,next_time,next_money,u)) print(visited[-1] if visited[-1] != INF else -1)