#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
struct node
{
int to;
int next;
int weight;
};
node a[N];
int head[N];
int d[N];
bool st[N];
int m,n;
int idx;
void add(int ak,int bk,int ck)
{
a[idx].to=bk;
a[idx].weight=ck;
a[idx].next=head[ak];
head[ak]=idx++;
}
void spfa(int u)
{
memset(d,0x3f,sizeof d);
memset(st,false,sizeof st);
d[u]=0;
st[u]=1;
queue<int>q;
q.push(1);
while(q.size())
{
int k=q.front();
q.pop();
st[k]=0;
for(int i=head[k];i!=-1;i=a[i].next)
{
int j=a[i].to;
if(d[j]>d[k]+a[i].weight)
{
d[j]=d[k]+a[i].weight;
if(!st[i])
{
q.push(j);
st[j]=true;
}
}
}
}
}
int main()
{
cin>>n>>m;
int u;
cin>>u;
int ak,bk,ck;
memset(head,-1,sizeof head);
for(int i=1;i<=m;i++)
{
cin>>ak>>bk>>ck;
add(ak,bk,ck);
add(bk,ak,ck);
}
spfa(u);
for(int i=1;i<=n;i++)
cout<<d[i]<<" ";
// cout<<d[n];
return 0;
}