#include<bits/stdc++.h>
using namespace std;
int n;
vector<int>dij(vector<vector<int>>m,int root){
vector<int>dis(n+1,50005);
vector<int>visit(n+1,false);
dis[root] = 0;
for(int i = 1;i<n;i++){
int node = -1;
for(int j = 1;j<=n;j++){
if(visit[j]==false&&(node==-1||dis[node]>dis[j])){
node = j;
}
}
for(int j = 1;j<=n;j++){
dis[j] = min(dis[j],dis[node]+m[node][j]);
}
visit[node] = true;
}
return dis;
}
int main(){
int m,s;
cin>>n>>m>>s;
vector<vector<int>>mp(n+1,vector<int>(n+1,50005));
for(int i = 0;i<m;i++){
int u,v;
cin>>u>>v;
cin>>mp[u][v];
}
vector<int>ans = dij(mp,s);
for(int i = 1;i<=n;i++){
if(ans[i]!=50005)cout<<ans[i]<<endl;
else cout<<INT_MAX;
}
return 0;
}