#include<bits/stdc++.h>
#include<vector>
using namespace std;
const long long int inf=1e10+5;
struct edge{
long long int v,w;
};
vector<edge> mp[1020];
long long int n,s,a,dist[1020];
bool f[1020];
void Dijkstra(int s){
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++) dist[i]=inf;
dist[s]=0;
while(true){
int x=0;
for(int i=1;i<=n;i++){
if(!f[i]&&dist[i]<inf){
if(x==0||dist[i]<dist[x]){
x=i;
}
}
}
if(x==0) break;
f[x]=true;
for(int i=0;i<mp[x].size();i++){
int v=mp[x][i].v,w=mp[x][i].w;
dist[v]=min(dist[v],dist[x]+w);
}
}
return ;
}
int main(){
cin>>n>>s>>a;
int ans[1020],sum=0;
int x[1020],y[1020],z[1020];
for(int i=1;i<=s;i++){
cin>>x[i]>>y[i]>>z[i];
edge tmp;
tmp.v=y[i],tmp.w=z[i];
mp[x[i]].push_back(tmp);
}
Dijkstra(a);
for(int i=1;i<=n;i++){
ans[i]=dist[i];
}
for(int i=1;i<=n;i++) mp[i].clear();
for(int i=1;i<=s;i++){
edge tmp;
tmp.v=x[i],tmp.w=z[i];
mp[y[i]].push_back(tmp);
}
Dijkstra(a);
for(int i=1;i<=n;i++){
ans[i]+= dist[i];
sum=max(sum,ans[i]);
}
cout<<sum;
return 0;
}