import heapq N,M,C = list(map(int,input().split())) edge = [[] for _ in range(N)] for _ in range(M): u,v,w = list(map(int,input().split())) u -= 1;v -= 1 edge[u].append((v,w+C)) edge[v].append((u,w+C)) q = [(0,0)] INF = 10**18 from_0 =[INF for _ in range(N)] while(q): v,now = heapq.heappop(q) if(from_0[now] <= v):continue from_0[now] = v for i,w in edge[now]: heapq.heappush(q,(v+w,i)) q = [(0,N-1,0)] from_N = [[INF,INF] for _ in range(N)] while(q): v,now,state = heapq.heappop(q) if(from_N[now][state] <= v):continue from_N[now][state] = v for i,w in edge[now]: heapq.heappush(q,(v+w,i,0)) if(state == 0):heapq.heappush(q,(v+C,i,1)) for i in range(1,N): print(min(from_0[-1],from_0[i] + min(from_N[i])))