#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e6+55,M=1e6+55;
ll head[N],tu[N];
ll n,m;
ll x,y,w,s;
ll val[N];
struct s
{
ll to,next,w,from;
}edge[M];
ll cnt=0;
void init()
{
for(ll i=1;i<=N;i++)head[i]=-1;
for(ll i=1;i<=M;i++)edge[i].next=-1;
cnt=0;
}
void add(ll x,ll y,ll w)
{
edge[cnt].to=y;
edge[cnt].from=x;
edge[cnt].next=head[x];
edge[cnt].w=w;
head[x]=cnt++;
}
vector<ll>q;
int main()
{
cin>>n>>m>>s;
for(ll i=1;i<=n;i++)val[i]=2147483647;
init();
val[s]=0;
for(ll i=1;i<=m;i++)
{
cin>>x>>y>>w;
add(x,y,w);
}
q.push_back(s);
while(!q.empty())
{
ll a=q.front();
q.erase(q.begin());
for(ll i=head[a];~i;i=edge[i].next)
{
val[edge[i].to]=min(val[edge[i].from]+edge[i].w,val[edge[i].to]);
if(tu[edge[i].to]==0)
{
q.push_back(edge[i].to);
tu[edge[i].to]=1;
}
}
}
for(ll i=1;i<=n;i++) printf("%lld ",val[i]);
return 0;
}