#include <queue>
#include <iostream>
using namespace std;
#define N 10005
int n, m, s;
struct E {
int to, d, nxt;
} e[N * 0xF];
int h[N * 0xF];
int tot;
#define LINK(u, v, w) e[++tot] = E{ v, w, h[u] }, h[u] = tot;
int vis[N];
queue<int> q;
int dis[N];
int main() {
cin >> n >> m >> s;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
LINK(u, v, w);
}
for (int i = 1; i <= n; i++)
dis[i] = 0x7FFFFFFF;
dis[s] = 0;
q.push(s);
vis[s] = 1;
while (!q.empty()) {
int u = q.front(); q.pop();
vis[u] = 0;
for (int i = h[u]; i; i = e[i].nxt) {
int v = e[i].to, w = e[i].d;
if (dis[u] + w < dis[v]) {
dis[v] = dis[u] + w;
if (vis[v] == 0) {
q.push(v);
vis[v] = 1;
}
}
}
}
for (int i = 1; i <= n; i++)
cout << dis[i] << " ";
puts("");
return 0;
}