#include <bits/stdc++.h>
using namespace std;
const int mn=1e5+7;
const int mm=2e5+7;
int fr[mn],nx[mm],to1[mm],to2[mm],tot=0,dis[mn],tt=0;
bool p[mn];
priority_queue< pair<int,int> > q;
void add(int x,int y,int v)
{
++tot;
nx[tot]=fr[x];
fr[x]=tot;
to1[tot]=y;to2[tot]=v;
}
int main()
{
int n,m,s;
cin>>n>>m>>s;
for(int i=1;i<=m;++i)
{
int x,y,v;
scanf("%d%d%d",&x,&y,&v);
add(x,y,v);
}
memset(dis,63,sizeof(dis));
dis[s]=0;
q.push(make_pair(0,s));
while(q.size())
{
int x=q.top().second;q.pop();
if(p[x]) continue;
p[x]=1;
for(int j=fr[x];j;j=nx[j])
{
int y=to1[j],v=to2[j];
//if(p[y]) continue;
if(dis[y]>v+dis[x])
{
dis[y]=v+dis[x];
q.push(make_pair(-dis[y],y));
}
}
}
for(int i=1;i<=n;++i)
{
cout<<dis[i]<<" ";
}
return 0;
}