#include<bits/stdc++.h>
using namespace std;
const int N=10050,M=500050;
const long long INF=2147483647;
int cnt=0,head[M],to[M],nett[M],lee[M];
int n,m,s,ss;
long long dis[N];
bool vis[N]={0};
void add(int qi,int tt,int le){
to[++cnt]=tt;
nett[cnt]=head[qi];
head[qi]=cnt;
lee[cnt]=le;
}
void dij(){
while(!vis[ss]){
long long minn=INF;
vis[ss]=1;
for(int i=head[ss];i!=0;i=nett[i]){
if(!vis[to[i]] && dis[to[i]] > dis[ss]+lee[i]){
dis[to[i]]=dis[ss]+lee[i];
}
}
for(int i=1;i<=m;i++){
if(dis[i] < minn && !vis[i]){
minn=dis[i];
ss=i;
}
}
}
}
int main(){
cin>>n>>m>>s;
ss=s;
for(int i=0;i<m;i++){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
}
for(int i=1;i<=n;i++)dis[i]=INF;
dis[s]=0;
dij();
for(int i=1;i<=n;i++){
cout<<dis[i]<<" ";
}
return 0;
}