#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+5;
struct node{
int val,num;
node(int newval,int newnum){val=newval;num=newnum;}
bool operator<(const node &a) const{
return val<a.val;
}
};
vector<pair<int,int> > vec[N];
priority_queue<node> qu;
int dis[N];
int n,m,s;
void dij()
{
dis[s]=0;
qu.push(node(0,s));
while(qu.size())
{
int front=qu.top().num;
qu.pop();
for(int i=0;i<vec[front].size();i++)
{
int to=vec[front][i].first,va=vec[front][i].second;
if(dis[to]>dis[front]+va)
{
dis[to]=dis[front]+va;
qu.push((node){dis[to],to});
}
}
}
}
int main()
{
int a,b,c;
cin>>n>>m>>s;
memset(dis,0x3f,sizeof(dis));
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
vec[a].push_back(make_pair(b,c));
}
for(int i=1;i<=n;i++)
cout<<dis[i]<<endl;
return 0;
}