rt,0pts
#include <bits/stdc++.h>
using namespace std;
int dis[10001],n,m,s;
bool p[10001];
struct info
{
int l,x;
bool operator<(const info &a) const
{
return a.l<l;
}
};
vector<info> v[10001];
void dij()
{
priority_queue<info> q;
for(int i=1;i<=n;i++) dis[i]=1e9;
dis[s]=0;
q.push((info){0,s});
while(!q.empty())
{
int u=q.top().x;
q.pop();
if(p[u]) continue;
p[u]=1;
for(int i=0;i<v[u].size();i++)
{
int x=v[u][i].x;
int l=v[u][i].l;
if(!p[x]&&dis[x]>dis[u]+l)
{
dis[x]=dis[u]+l;
q.push((info){dis[x],x});
}
}
}
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int x,y,z;
info temp;
cin>>x>>y>>z;
temp.l=z,temp.x=y;
v[x].push_back(temp);
temp.x=x;
v[y].push_back(temp);
}
dij();
for(int i=1;i<=n;i++)
cout<<dis[i]<<" ";
return 0;
}