#include<bits/stdc++.h>
using namespace std;
const int N=10010;
const long long maxx=2147484647;
int n,m,x,y,s;
long long dis[N],z;
int node[N][2],vis[N];
int head[N],num;
struct Edge{
int to,next;
long long d;
}edge[500010];
void SK(int a,int b,long long c)
{ num++;
edge[num].to=b;
edge[num].d=c;
edge[num].next=head[a];
head[a]=num;
}
int main()
{ cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{ cin>>x>>y>>z;
SK(x,y,z);
}
for(int i=1;i<=n;i++)
{ dis[i]=maxx;
}
dis[s]=0;
vis[s]=1;
for(int i=1;i<=n-1;i++)
{ long long maxn=maxx;
int tmp=s;
for(int j=1;j<=n;j++)
{ if(!vis[j] && dis[j]<maxn)
{ maxn=dis[j];
tmp=j;
}
}
vis[tmp]=1;
for(int j=head[tmp];j;j=edge[j].next)
{ int k=edge[j].to;
double d=edge[j].d;
if(!vis[k] && dis[k]>dis[tmp]+d)
dis[k]=dis[tmp]+d;
}
}
for(int i=1;i<=n;i++)
{ cout<<dis[i]<<' ';
}
return 0;
}