#include<bits/stdc++.h>
using namespace std;
const int N=1e4+1;
const long long INF=0x3f3f3f3f;
int n,m,s,cu,cv,cw;
long long f[N];
struct pic
{int to,w;};
vector<pic> v[N];
void Dijkstra(int s)
{
bool vis[N];
memset(f,INF,sizeof(f));
f[s]=0;vis[s]=1;
for(int i=1;i<=n;++i)
if(i!=s)
{
int u;
long long mx=INF;
for(int j=1;j<=n;++j)
if(!vis[j]&&mx>=f[j])
{mx=f[j];u=j;}
vis[u]=1;
for(int j=0;j<v[u].size();++j)
f[v[u][j].to]=min(f[v[u][j].to],f[u]+v[u][j].w);
}
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;++i)
{
cin>>cu>>cv>>cw;
v[cu].push_back((pic){cv,cw});
}
Dijkstra(s);
for(int i=1;i<=n;++i)
{
if(i!=s&&!f[i]) cout<<2147483647<<' ';
else cout<<f[i]<<' ';
}
return 0;
}