#include<bits/stdc++.h>
using namespace std;
struct edge{
long long nex;
long long v,w;
}e[1000002];
long long head[1000002]={},cnt=1;
bool xu[1000002]={};
long long d[1000002];
void add(long long u,long long v,long long w){
e[cnt].nex=head[u];
head[u]=cnt;
e[cnt].v=v;
e[cnt].w=w;
cnt++;
}
int main(){
long long n,m,f;
cin>>n>>m>>f;
long long u,v,w;
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
}
for(int i=1;i<=n;i++){
if(i==f){
d[i]=0;
xu[i]=1;
}
else{
d[i]=214748364;
}
}
int t=f;
int mi=214748364,num=0;
for(int i=1;i<=n;i++){
for(int j=head[t];j;j=e[j].nex){
if(!xu[e[j].v]){
//cout<<d[t]+e[j].w<<endl;
//d[e[j].v]=min(d[e[j].v],d[t]+e[j].w);
if(d[e[j].v]>d[t]+e[j].w){
d[e[j].v]=d[t]+e[j].w;
}
if(d[e[j].v]<mi){
mi=d[e[j].v];
num=e[j].v;
}
}
}
mi=214748364;
t=num;
xu[t]=1;
}
for(int i=1;i<=n;i++){
printf("%d ",d[i]);
}
return 0;
}