#include <bits/stdc++.h>
using namespace std;
#define ll long long
const long long inf = 2147483647;
struct adjnode {
ll goal;
ll w;
};
int main() {
ll n, m, s;
cin >> n >> m >> s;
vector<vector<adjnode>> adj(n + 1);
vector<ll> dist(n + 1, inf);
vector<ll> vis(n + 1, 1);
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
for (int i = 1; i <= m; i++) {
ll u, v, w;
cin >> u >> v >> w;
adjnode tmp;
tmp.goal = v;
tmp.w = w;
adj[u].push_back(tmp);
}
dist[s] = 0;
vis[s] = 0;
ll start = s;
ll next = 0;
while (1) {
ll Min = inf;
for (int i = 0; i < adj[start].size(); i++) {
dist[adj[start][i].goal] = min(dist[adj[start][i].goal], adj[start][i].w + dist[start]);
if (vis[adj[start][i].goal] && dist[adj[start][i].goal] < Min) {
next = adj[start][i].goal;
Min = dist[adj[start][i].goal];
}
}
if (Min == inf) {
break;
}
start = next;
vis[start] = 0;
}
for (int i = 1; i <= n; i++) {
cout << dist[i];
if (i != n) {
cout << " ";
}
}
return 0;
}