#include<bits/stdc++.h>
#define maxn 10000010
using namespace std;
const int inf=1145141919;
int n,m,s,cnt;
int w[maxn];
int to[maxn];
int nex[maxn];
long long dis[maxn];bool vis[maxn];
int head[maxn],p[maxn],va[maxn];
bool f[maxn];
void into(int x,int y,int z){
to[++cnt]=y;
nex[cnt]=head[x];
head[x]=cnt;
w[cnt]=z;
}
void dijkstra(){
for(int i=1;i<=n;i++)dis[i]=inf;
dis[s]=0;
dis[0]=inf;
while(1){
int u=0;
for(int i=1;i<=n;i++){
if(!vis[i]&&dis[u]>dis[i]){
u=i;
}
}
if(u==0)break;
vis[u]=1;
for(int i=head[u];i;i=nex[i]){
if(dis[to[i]]>=dis[u]+w[i])
dis[to[i]]=dis[u]+w[i];
}
}
}
int main(){
ios::sync_with_stdio(0);
cin>>n>>m>>s;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
into(u,v,w);
}
dijkstra();
if(dis[n]==inf)
cout<<-1;
else cout<<dis[n];
return 0;
}