#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+4;
struct node{
int v,w,nxt;
}e[maxn<<1];
int head[maxn],tot=0,vis[maxn],d[maxn];
inline void add(int u,int v,int w){
e[++tot]=(node){v,w,head[u]};
head[u]=tot;
}
int main(){
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
while(m--){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
queue<int> q;
q.push(s);
for(int i=1;i<=n;i++)
vis[i]=0,d[i]=1<<30;
d[s]=0;
while(!q.empty()){
int u=q.front();
q.pop();
if(vis[u])
continue;
for(int i=head[u];i;i=e[i].nxt ){
if(d[u]+e[i].w <d[(e[i].v )])
d[e[i].v ]=d[u]+e[i].w ;
q.push(e[i].v );
}
vis[u]=1;
}
for(int i=1;i<=n;i++)
(vis[i])?printf("%d ",d[i]):printf("2147483647 ");
return 0;
}