#include<bits/stdc++.h>
using namespace std;
struct edge{
long long to;
long long w;
};
vector<edge>e[100010];
long long n,m,S;
long long d[100010];
int main(){
cin>>n>>m>>S;
for(int i=0;i<m;i++){
long long u,v,w;
cin>>u>>v>>w;
e[u].push_back((edge){v,w});
}
for(int i=1;i<=n;i++){
d[i]=(1<<31)-1;
}
d[S]=0;
bool flag;
do{
flag=false;
for(int i=1;i<=n;i++){
for(int j=0;j<e[i].size();j++){
if(d[i]+e[i][j].w<d[e[i][j].to]){
d[e[i][j].to]=d[i]+e[i][j].w;
flag=true;
}
}
}
}while(flag);
for(int i=1;i<=n;i++){
cout<<d[i]<<" ";
}
return 0;
}