#include using namespace std; using ll = long long; int main(void) { int N, M, C; cin >> N >> M >> C; vector>> G(N * 2); while(M--) { int u, v, w; cin >> u >> v >> w, --u, --v; G[u].emplace_back(make_pair(v, C + w)); G[v].emplace_back(make_pair(u, C + w)); G[N + u].emplace_back(make_pair(N + v, C + w)); G[N + v].emplace_back(make_pair(N + u, C + w)); G[u].emplace_back(make_pair(N + v, C)); G[v].emplace_back(make_pair(N + u, C)); } auto dijkstra = [&](int st) { vector d(N * 2, 1e18); priority_queue, vector>, greater>> que; d[st] = 0; que.push(make_pair(d[st], st)); while(!que.empty()) { auto [vd, v] = que.top(); que.pop(); if(vd != d[v]) continue; for(auto [nv, c] : G[v]) { if(vd + c < d[nv]) { d[nv] = vd + c; que.push(make_pair(d[nv], nv)); } } } return d; }; vector ds = dijkstra(0), dt = dijkstra(N - 1); for(int i = 1; i < N; ++i) cout << min(ds[N - 1], ds[i] + dt[N + i]) << "\n"; return 0; }