#include<cstdio>
#include<cstring>
const int N=2147483647;
long long ans[100005];
bool fr[100005];
struct node{
int u,v,w;
}a[500005];
int n,m,k;
signed main(){
memset(fr,true,sizeof(fr));
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;++i) ans[i]=N;
int u1,v1,w1;
for(int i=1;i<=m;++i){
scanf("%d%d%d",&u1,&v1,&w1);
a[i].u=u1; a[i].v=v1; a[i].w=w1;
}
ans[k]=0;
while(1){
int min=N,suh;
for(int i=1;i<=n;++i)
if(fr[i]&&min>ans[i]){
min=ans[i];suh=i;
}
if(min==N) break;
fr[suh]=false;
for(int i=1;i<=m;++i){
if(a[i].u==suh&&ans[suh]+a[i].w<ans[a[i].v])
ans[a[i].v]=ans[suh]+a[i].w;
}
}
for(int i=1;i<=n;++i) printf("%lld ",ans[i]);
}