#include<bits/stdc++.h>
using namespace std;
struct l{
vector<pair<int,int> >a;
}f[20001];
int n,m,s;
int dis[2001],vis[2001];
priority_queue<pair<int,int> >q;
void dij(){
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
q.push(make_pair(0,s));
while(q.size()){
int x=q.top().second;q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=0;i<f[x].a.size();i++){
if(dis[f[x].a[i].first]>dis[x]+f[x].a[i].second){
dis[f[x].a[i].first]=dis[x]+f[x].a[i].second;
q.push(make_pair(-dis[f[x].a[i].first],i));
}
}
}
return ;
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int u,v,l;
cin>>u>>v>>l;
f[u].a.push_back(make_pair(v,l));
}
dij();
for(int i=1;i<=n;i++){
if(dis[i]==0x3f3f3f)cout<<2147483647;
else cout<<dis[i]<<" ";
}
}