n, m, c = map(int, input().split()) node = [[] for _ in range(n)] for _ in range(m): u, v, w = map(int, input().split()) u, v = u-1, v-1 node[u].append((v, w)) node[v].append((u, w)) from heapq import * hq = [(0, 0)] inf = 1 << 60 D = [inf] * n D[0] = 0 while hq: dist, now = heappop(hq) if D[now] < dist: continue for nxt, w in node[now]: ndist = dist+w+c if D[nxt] > ndist: D[nxt] = ndist heappush(hq, (ndist, nxt)) E = [inf] * 2*n E[2*n-1] = 0 hq = [(0, 2*n-1)] while hq: dist, now = heappop(hq) if E[now] < dist: continue for nxt, w in node[now%n]: f = 0 if now//n: ndist = dist+c if E[nxt] > ndist: E[nxt] = ndist heappush(hq, (ndist, nxt)) f = n ndist = dist+w+c if E[nxt+f] > ndist: E[nxt+f] = ndist heappush(hq, (ndist, nxt+f)) for i in range(1, n): print(min(D[n-1], D[i]+E[i]))