#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
queue<int> q,p;
vector<int> v[500010],g[500010];
int n,m,s,x,y,z,i,mi,j,f[10010];
int main(){
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
v[x].push_back(y);
v[y].push_back(x);
g[x].push_back(z);
g[y].push_back(z);
}
for(i=1;i<=n;i++){
while(!q.empty()) q.pop();
while(!p.empty()) p.pop();
mi=1e9;
if(i==s){
printf("0 ");
continue;
}
memset(f,0,sizeof(f));
q.push(i);p.push(0);
while(!q.empty()){
x=q.front();y=p.front();
f[x]=1;
for(j=0;j<v[x].size();j++){
if(f[v[x][j]]==0){
q.push(v[x][j]);p.push(y+g[x][j]);
if(v[x][j]==s){
mi=min(mi,y+g[x][j]);
}
}
}
q.pop();p.pop();
}
if(mi==1e9){
printf("%d ",2<<31-1);
}
printf("%d ",mi);
}
return 0;
}