#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int N=1e5+10;
const int M=4e5+10;
priority_queue<int,vector<int>,greater<int> >q;
int n,m,s,pre[N],now[N],to[N],val[N];
int dis[N],tot;bool vis[N];
void add(int x,int y,int z){
pre[++tot]=now[x];
to[tot]=y,val[tot]=z;
now[x]=tot;
}
void dijkstra(int st){
memset(dis,0x3f,sizeof(dis));
dis[st]=0;q.push(st);
while(!q.empty()){
int u=q.top();q.pop();
if(vis[u])continue;
vis[u]=true;
for(int i=now[u];i;i=pre[i]){
int v=to[i],z=val[i];
if(dis[u]+z<dis[v])
dis[v]=dis[u]+z,q.push(v);
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&s);
for(int i=1,u,v,l;i<=m;i++){
scanf("%d%d%d",&u,&v,&l);
add(u,v,l);
}
dijkstra(s);
for(int i=1;i<=n;i++)
printf("%d ",dis[i]);
return 0;
}