#include <bits/stdc++.h>
using namespace std;
struct AI{
long long zhi,zhong;
};
struct node{
long long hao,zhi;
friend bool operator<(const node a,const node b)
{
return a.zhi<b.zhi;
}
};
long long n,m,w,d[200010];
priority_queue <node> q;
vector <AI> a[200010];
bool f[200010];
int main(){
cin>>n>>w>>m;
for(long long i=1;i<=w;i++){
long long r;
cin>>r;
long long o,x;
cin>>o>>x;
a[r].push_back({x,o});
}
memset(d,0x3f,sizeof(d));
long long h;
d[m]=0;
q.push({m,d[m]});
for(long long i=1;i<=n;i++){
h=q.top().hao;
q.pop();
if(f[h]){
continue;
}
f[h]=true;
for(long long j=0;j<a[h].size();j++){
if(a[h][j].zhi!=0&&d[a[h][j].zhong]>d[h]+a[h][j].zhi){
d[a[h][j].zhong]=d[h]+a[h][j].zhi;
if(!f[j]){
q.push({a[h][j].zhong,d[a[h][j].zhong]});
}
}
}
}
for(long long i=1;i<=n;i++){
cout<<d[i]<<" ";
}
return 0;
}