#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 200005
int nxt[N],to[N],head[N],edge[N],cnt;
int dis[N],vis[N];
int n,m,s;
void add(int u,int v,int w){
nxt[++cnt]=head[u];
head[u]=cnt;
to[cnt]=v;
edge[cnt]=w;
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m>>s;
int u,v,w;
cnt=0;
for (int i=1;i<=m;i++){
cin>>u>>v>>w;
add(u,v,w);
}
priority_queue<int> q;
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
q.push(s);
while (!q.empty()){
int u=q.top();
q.pop();
if (vis[u]) continue;
vis[u]=1;
for (int i=head[u];i;i=nxt[i]){
int v=to[i],w=edge[i];
if (dis[v]>dis[u]+w) {
dis[v]=dis[u]+w;
if (!vis[v]) q.push(v);
}
}
}
for (int i=1;i<=n;i++){
cout<<dis[i]<<' ';
}
return 0;
}