def main(): import sys input = sys.stdin.readline 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)) def make_hash(a,b): return (a<<20) + b def read_hash(x): return x>>20, x & ((1<<20) - 1) q = [make_hash(0,0)] INF = 10**18 from_0 =[INF for _ in range(N)] while(q): v,now = read_hash(heapq.heappop(q)) if(from_0[now] <= v):continue from_0[now] = v for i,w in edge[now]: if(from_0[i] > v+w):heapq.heappush(q,make_hash(v+w,i)) def make_hash2(a,b,c): ret = a<<21 ret |= b<<1 ret |= c return ret def read_hash2(x): return x>>21, (x>>1) & ((1<<20)-1), x & 1 q = [make_hash2(0,N-1,0)] from_N = [[INF,INF] for _ in range(N)] while(q): v,now,state = read_hash2(heapq.heappop(q)) if(from_N[now][state] <= v):continue from_N[now][state] = v for i,w in edge[now]: if(from_N[i][state] > v+w):heapq.heappush(q,make_hash2(v+w,i,state)) if(state == 0 and from_N[i][1] > v+C):heapq.heappush(q,make_hash2(v+C,i,1)) ans = [] for i in range(1,N): ans.append(min(from_0[-1],from_0[i] + min(from_N[i]))) print("\n".join(map(str,ans))) main()