#include<bits/stdc++.h>
using namespace std;
const int N = 100010, M = 200010;
int n, m, s;
int dist[N], st[N];
int h[N], idx, e[M], ne[M], w[M];
using PII = pair<int, int>;
void add(int a, int x, int b){
e[idx] = x, w[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
void dijkstra(){
memset(dist, 0x3f, sizeof dist);
dist[s] = 0;
priority_queue<PII, vector<PII>, greater<PII>> heap;
heap.push({0, s});
while(!heap.empty()){
auto t = heap.top();
heap.pop();
int ver = t.second, distance = t.first;
if(st[ver]) continue;
for(int i = h[ver]; i != -1; i = ne[i]){
int j = e[i];
if(dist[j] > w[i] + distance)
{
dist[j] = w[i] + distance;
heap.push({dist[j], j});
}
}
}
}
int main(){
memset(h, -1, sizeof h);
cin >> n >> m >> s;
for(int i = 1; i <= m; i ++ ){
int _, __, ___;
cin >> _ >> __ >> ___;
add(_, __, ___);
}
dijkstra();
for(int i = 1; i <= n; i ++ )
cout << dist[i] << " ";
}