#include<bits/stdc++.h>
using namespace std;
long long dis[100500],n,m,s,a,b,c;
bool diz[100500];
priority_queue<pair<long long,long long>,vector<pair<long long,long long> >,greater<pair<long long,long long > > >xx;
vector<pair<long long,long long> >r[100500];
int main(){
scanf("%lld%lld%lld",&n,&m,&s);
for(long long i=1;i<=m;i++){
scanf("%lld%lld%lld",&a,&b,&c);
r[a].push_back(make_pair(b,c));
}
for(long long i=1;i<=n;++i)
dis[i]=2147483647;
dis[s]=0;
xx.push(make_pair(0,s));
while(!xx.empty()){
if(!diz[xx.top().second]){
diz[xx.top().second]=1;
for(long long i=0;i<r[xx.top().second].size();++i)
if(dis[r[xx.top().second][i].first]>dis[xx.top().second]+r[xx.top().second][i].second){
dis[r[xx.top().second][i].first]=dis[xx.top().second]+r[xx.top().second][i].second;
if(!diz[r[xx.top().second][i].first])
xx.push(make_pair(dis[r[xx.top().second][i].first],r[xx.top().second][i].first));
}
}
xx.pop();
}
for(long long i=1;i<=n;++i)
printf("%lld ",dis[i]);
return 0;
}