#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int u[10000],v[10000],w[10000],n,m,s,r[10000],stat[10000]={0};
long long maxn=0;
int check(){
for(int i=1;i<=n;i++){
if(stat[i]==0) return 0;
}
return 1;
}
int dijkstra(int cur,int dist){
if(check()) return 0;
for(int i=0;i<m;i++){
if(cur==u[i]){
if(r[v[i]]>w[i]) r[v[i]]=w[i];
}
if(cur==v[i]){
if(r[u[i]]>w[i]) r[u[i]]=w[i];
}
}
int t1,t2=999999999;
for(int i=1;i<=n;i++){
if(r[i]<t2&&(u[i]==cur||v[i]==cur)){
t2=r[i];t1=i;
}
}
stat[t1]=1;
return dijkstra(t1,dist+w[t1]);
}
int main(){
cin>>n>>m>>s;
for(int i=0;i<m;i++){
cin>>u[i]>>v[i]>>w[i];
if(w[i]>maxn) maxn=w[i];
}
maxn*=n;
for(int i=1;i<=n;i++) r[i]=999999999;
int t;
t=dijkstra(s,0);
for(int i=1;i<=n;i++){
if(r[i]==999999999) cout<<pow(2,31)-1<<" ";
else cout<<r[i]<<" ";
}
getchar();getchar();
return 0;
}