#include<bits/stdc++.h>
using namespace std;
const int N=100001;
int n,m,s,obj,pre[N];
bool vis[N];
int dis[N];
struct node{
int u,v,w;
node(){u=v=w=0;}
friend bool operator < (node a,node b){return a.w>=b.w;}
};
priority_queue<node>q;
vector<node>g[N];
void dj(int be){
vis[be]=1,dis[be]=0;
node tp;
tp.u=tp.v=be,
q.push(tp);
while(!q.empty()){
tp=q.top(),q.pop();
int b=tp.v;
if(!vis[b]){
vis[b]=1;
for(int i=0;i<g[b].size();i++){
int value=dis[b]+g[b][i].w;
if(value<dis[g[b][i].v]){
dis[g[b][i].v]=value;
tp.u=b,tp.v=g[b][i].v,tp.w=dis[g[b][i].v];
q.push(tp);
}
}
}
}
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=n;i++)dis[i]=(1ll<<31)-1,pre[i]=i;
while(m--){
node tp;
cin>>tp.u>>tp.v>>tp.w;
g[tp.u].push_back(tp);
}
dj(s);
for(int i=1;i<=n;i++)cout<<dis[i]<<" ";
}