#include<bits/stdc++.h>
using namespace std;
int n, m, s, ans[10005], mrk[10005];
struct Node
{
int t, v;
};
vector<Node>r[10005];
queue<int>stl;
int main()
{
memset(ans,0x7f7f7f,sizeof(ans));
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int a, b, c;
cin>>a>>b>>c;
Node t;
t.t=b;
t.v=c;
r[a].push_back(t);
}
stl.push(s);
ans[s]=0;
while(!stl.empty())
{
int p=stl.front();
stl.pop();
mrk[p]=0;
for(int i=0;i<r[p].size();i++)
{
int t=r[p][i].t, v=r[p][i].v;
if(ans[t]>ans[p]+v)
{
ans[t]=ans[p]+v;
if(mrk[t]==0)
{
mrk[t]=1;
stl.push(t);
}
}
}
}
for(int i=1;i<=n;i++)
cout<<ans[i]<<" ";
return 0;
}