#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+5;
const int inf = 2147483647;
struct Node{
int v,w;
};
int n,m,s,d[maxn];
bool vis[maxn];
vector<Node> e[maxn];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
void dijkstra(){
for(int i=0;i<=n;i++){
d[i] = inf;
}
d[s] = 0;
q.push({0,s});
while(!q.empty()){
int u = q.top().second;
q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(auto ed:e[u]){
int v = ed.v,w = ed.w;
if(d[v] > d[u]+w){
d[v] = d[u]+w;
q.push({d[v],v});
}
}
}
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=n;i++){
int u,v,w;cin>>u>>v>>w;
e[u].push_back(Node{v,w});
}
dijkstra();
for(int i=1;i<=n;i++){
cout<<d[i]<<' ';
}
return 0;
}