#include <bits/stdc++.h>
using namespace std;
struct node {
int v, w;
}temp;
int d[500005],vis[500005];
int n, m, s,u;
vector<node> v[500005];
int main() {
for (int i = 0; i < 500002; i++)d[i] = 1e9;
cin >> n >> m >> s;
for (int i = 0; i <m; i++) {
cin >> u >> temp.v >> temp.w;
v[u].push_back(temp);
}
d[s] = 0;
int id=0, minn = 1e9;
for (int i = 0; i < n; i++) {
minn = 1e9,id=0;
for (int j = 1; j <= n; j++) {
if (minn > d[j] && !vis[j]) {
id = j;
minn = d[j];
}if (id == 0)break;
vis[id] = 1;
for (int j = 0; j < v[id].size(); j++) {
if (v[id][j].w + d[id] < d[v[id][j].v]) {
d[v[id][j].v] = d[id] + v[id][j].w;
}
}
}
}
for (int i = 1; i <= n; i++) {
if (d[i] == 1e9)cout << 2147483647 << " ";
else cout << d[i] << " ";
}
return 0;
}