#include<bits/stdc++.h>
using namespace std;
const int inf=214364;
struct node
{
int v;
int id;
bool operator <(const node &x)const
{
return v>x.v;
}
};
struct node1
{
int v1;
int w;
};
priority_queue<node> q;
vector<node1>a[inf];
int ans[inf];
bool b[inf];
int fin[inf];
int main()
{
int n,m,s,uu,vv,ww;
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
cin>>uu>>vv>>ww;
a[uu].push_back((node1){vv,ww});
}
memset(ans,inf,sizeof(ans));
ans[s]=0;
q.push((node){0,s});
while(!q.empty())
{
node t=q.top();
q.pop();
int now=t.id;
int d=ans[t.id];
if(b[now])
continue;
b[now]=1;
for(int j=0;j<a[now].size();j++)
{
if(b[a[now][j].v1]) continue;
if(ans[a[now][j].v1]>d+a[now][j].w)
{
ans[a[now][j].v1]=d+a[now][j].w;
q.push((node){ans[a[now][j].v1],a[now][j].v1});
}
}
}
long long p=pow(2,31)-1;
for(int i=1;i<=n;i++)
{
if(ans[i]==inf) cout<<p<<" ";
else cout<<ans[i]<<" ";
}
return 0;
}