#include using i64 = long long; using u64 = unsigned long long; using u32 = unsigned; using u128 = unsigned __int128; using i128 = __int128; constexpr i64 inf = 2e18; void solve() { int N, M; i64 C; std::cin >> N >> M >> C; std::vector>> g(2 * N); for(int i = 0; i < M; i ++) { int u, v; i64 w; std::cin >> u >> v >> w; u --; v --; g[u].emplace_back(v, w + C); g[v].emplace_back(u, w + C); g[u].emplace_back(v + N, C); g[v].emplace_back(u + N, C); g[u + N].emplace_back(v + N, w + C); g[v + N].emplace_back(u + N, w + C); } auto work = [&](int x) { std::vector dist(2 * N, inf); dist[x] = 0; std::priority_queue, std::vector>, std::greater<>> pq; pq.push({0, x}); while(!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if(d > dist[u]) continue; for(auto [v, w] : g[u]) { if(x == 0 && v >= N) continue; if(dist[u] + w < dist[v]) { dist[v] = dist[u] + w; pq.push({dist[v], v}); } } } return dist; }; auto d1 = work(0); auto dN = work(N - 1); for(int i = 1; i < N; i ++) std::cout << std::min(d1[N - 1], d1[i] + dN[i + N]) << "\n"; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int T = 1; //std::cin >> T; while (T--) { solve(); } return 0; }