#include<bits/stdc++.h>
using namespace std;
#define maxn 10005
#define maxm 500005
struct L{
int to,val;
};
int n,m,s;
bool vis[maxn];
long long dis[maxn];
vector<L>g[maxn];
void spfa(){
queue<int>q;
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
q.push(s);
vis[s]=1;
while(!q.empty()){
int now=q.front();
q.pop();
vis[now]=0;
for(int i=g[now].size()-1;i>=0;i--){
int to=g[now][i].to;
if(dis[to]>dis[now]+g[now][i].val){
dis[to]=dis[now]+g[now][i].val;
if(!vis[to]){
vis[to]=1;
q.push(to);
}
}
}
}
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
g[u].push_back({v,w});
g[v].push_back({u,w});
}
spfa();
for(int i=1;i<=n;i++){
if(dis[i]==0x3f3f3f3f3f3f3f3f){
cout<<2147483647<<' ';
}
else cout<<dis[i]<<' ';
}
return 0;
}