#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int dist[N];
int g[N][N];
int st[N];
void dijkstra(int s,int n){
memset(dist ,0x3f,sizeof dist);
dist[s]=0;
for(int i=1;i<=n;i++)
{
int t=-1;
for(int j=1;j<=n;j++){
if(!st[j]&&(t==-1||dist[t]>dist[j])){
t=j;
}
}
st[t]=1;
for(int j=1;j<=n;j++){
dist[j]=min(dist[j],dist[t]+g[t][j]);
}
}
}
int main(void){
int n,m,s;
cin>>n>>m>>s;
memset(g,0x3f,sizeof g);
while(m--){
int x,y,w;
cin>>x>>y>>w;
g[x][y]=min(g[x][y],w);
}
dijkstra(s,n);
for(int i=1;i<=n;i++){
if(dist[i]==0x3f3f3f3f){
cout<<2147483647<<' ';
}
else{
cout<<dist[i]<<' ';
}
}
return 0;
}