#include <bits/stdc++.h>
#define inf INT_MAX;
using namespace std;
using ll = long long ;
const int N = 1e5 + 50 ;
int n,m,s;
struct edge {
int v,w;
};
vector<edge>e[N];
int d[N];
bool flag;
void BellmanFord(int s) {
for (int i = 0;i <= n; i++) d[i] = inf;
d[s] = 0;
for (int i = 1;i <= n; i++) {
flag = false;
for (int u = 1;u <= n; u++) {
for (auto t:e[u]) {
int v = t.v;
int w = t.w;
if (d[v] > d[u] + w) {
d[v] = d[u] + w;
flag = true;
}
}
}
if (!flag) break;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> s;
for (int i = 1;i <= m; i++) {
int u,v,w; cin >> u >> v >> w;
e[u].push_back({v,w});
}
BellmanFord(s);
for (int i = 1;i <= n; i++) cout << d[i] << " ";
return 0;
}