#include<bits/stdc++.h>
using namespace std;
int dis[10005],n,m,q,bj[10005];
struct bb {
int tot,son[1001],w[1001];
}hzx[10001];
struct bl {
int dis,x;
bool operator < (bl k) const {
return dis<k.dis;
}
};
priority_queue<bl> mp;
void dij(int x) {
mp.push(bl{dis[x],x});
while(!mp.empty()) {
bl tmp=mp.top();
mp.pop();
if(bj[tmp.x]) continue;
bj[tmp.x]=1;
for(int i=1;i<=hzx[tmp.x].tot;i++) {
int u=hzx[tmp.x].son[i];
if(dis[u]>dis[tmp.x]+hzx[tmp.x].w[i]) {
dis[u]=dis[tmp.x]+hzx[tmp.x].w[i];
if(bj[x]==0) {
mp.push(bl{dis[u],tmp.x});
}
}
}
}
}
int main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++) {
dis[i]=INT_MAX;
}
for(int i=1;i<=m;i++) {
int x,y,z;
cin>>x>>y>>z;
int u=++hzx[x].tot;
hzx[x].son[u]=y,hzx[x].w[u]=z;
u=++hzx[y].tot;
hzx[y].son[u]=x,hzx[y].w[u]=z;
}
dis[q]=0;
dij(q);
for(int i=1;i<=n;i++) {
cout<<dis[i]<<' ';
}
return 0;
}