#include<bits/stdc++.h>
using namespace std;
int n,m,s,c[100000],pos,head[400000],cnt=0;
bool b[100000]={0};
struct aaa
{
int u;
int v;
int w;
}tu[400000];
void add(int x,int y,int z)
{
tu[++cnt].u=head[x];
tu[cnt].v=y;
tu[cnt].w=z;
head[x]=cnt;
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(register int i=1;i<=m;i++)
{
int a,b,k;
scanf("%d%d%d",&a,&b,&k);
add(a,b,k);
add(b,a,k);
}
memset(c,99999999,sizeof(c));
c[s]=0,pos=s;
while(b[pos]==0)
{
int minn=99999999;
b[pos]=1;
for(register int i=head[pos];i!=0;i=tu[i].v) if(b[tu[i].u]==0&&c[tu[i].u]>c[pos]+tu[i].w) c[tu[i].u]=c[pos]+tu[i].w;
for(register int i=1;i<=n;i++) if(c[i]<minn&&b[i]==0) minn=c[i],pos=i;
}
for(register int i=1;i<=n;i++) printf("%d ",c[i]);
return 0;
}