#include
#include
#include
#include
#include
#include
#include
const int maxn=10000+10,inf=1000000000;
using namespace std;
struct node{int to,z;};
int p[maxn],d[maxn];
vectore[maxn];
int q[maxn*100];
int main(){
int i,j,k,m,n,s;
cin>>n>>m>>s;
for(i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
node t;
t.to=y;t.z=z;
e[x].push_back(t);
}
for(i=1;i<=n;i++)d[i]=inf;
d[s]=0;
q[1]=s;p[s]=1;
int f=0,l=1;
while(fint x=q[f];
for(i=0;iint u=e[x][i].to,v=e[x][i].z;
if(d[u]>d[x]+v){
d[u]=d[x]+v;
if(!p[u]){
q[++l]=u;
p[u]=1;
}
}
}
p[x]=0;
}
for(i=1;i<=n;i++)
if(d[i]printf("%d ",d[i]);
else printf("2147483647 ");
return 0;
}