#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int M=1e3+10;
const int N=1e6+10;
int n,m,b;
int map[M][M];
int dis[N];
int pd[N];
void dij(){
memset(dis,0x7f,sizeof(dis));
int minn=0;
int minb=b;
dis[b]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(map[i][j]&&map[minb][j]+dis[minb]<dis[j]){
dis[j]=map[i][j]+dis[minb];
}
}
pd[minb]=1;
minn=0x7fffffff;
for(int j=1;j<=n;j++){
if(!pd[j]&&dis[j]<minn){
minn=dis[j];
minb=j;
}
}
}
}
int main(){
cin>>n>>m>>b;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
map[x][y]=z;
map[y][x]=z;
}
dij();
for(int i=1;i<=n;i++){
cout<<dis[i]<<' ';
}
return 0;
}