#include<iostream>
#include<cstdio>using namespace std;#define maxl 2147483647struct node{ int from,next,to,w;}e[500005];int dis[500005],v[500005],head[500005],q[500005],n,m,s,cnt;void add(int u,int v,int w){ e[cnt].w=w; e[cnt].to=v; e[cnt].from=u; e[cnt].next=head[u]; head[u]=cnt; cnt++;}void spfa(){ int h,t,sp; t=1; h=0; v[s]=1; q[1]=s; while (h<t) { h++; sp=q[h]; v[sp]=0; for (int k=head[sp];k!=-1;k=e[k].next) { if (dis[e[k].to]>e[k].w+dis[sp]) { dis[e[k].to]=e[k].w+dis[sp]; if (v[e[k].to]!=1) { t++; v[e[k].to]=1; q[t]=e[k].to; } } } }}int main(){ scanf("%d%d%d",&n,&m,&s); for (int i=1;i<=n;i++) { head[i]=-1; dis[i]=maxl; } dis[s]=0; for (int i=1;i<=m;i++) { int xx,yy,vv; scanf("%d%d%d",&xx,&yy,&vv); add(xx,yy,vv); } spfa(); for (int i=1;i<=n;i++) printf("%d ",dis[i]); return 0;}