#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int u,v,w;
int dis[300000];
int f[300000];
vector<int> a[300000],b[300000];
priority_queue<int,vector<int>,greater<int> > q;
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
a[u].push_back(v),b[u].push_back(w);
a[v].push_back(u),b[v].push_back(w);
}
for(int i=1;i<=n;i++) dis[i]=1e9;
dis[s]=0;
q.push(s);
while(q.size())
{
int x=q.top();
q.pop();
for(int i=0;i<a[x].size();i++)
if(dis[a[x][i]]>dis[x]+b[x][i])
{
dis[a[x][i]]=dis[x]+b[x][i];
if(!f[a[x][i]]) q.push(a[x][i]),f[a[x][i]]=1;
}
}
for(int i=1;i<=n;i++) printf("%d ",dis[i]);
return 0;
}