#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 1050
#define M 200010
ll n,m,x,a[N],b[N],c[N];
struct edge
{
ll v,w;
};
bool vis[N];
vector<edge> e[M];
ll d[N];
ll ans[N];
void dijkstra(ll s)
{
memset(d,inf,sizeof(d));
priority_queue<pair<ll,ll>> q;
d[s]=0;
q.push({0,s});
while(q.size())
{
auto t=q.top();
q.pop();
ll u=t.second;
if(vis[u]) continue;
vis[u]=1;
for(auto ed:e[u])
{
ll v=ed.v,w=ed.w;
if(d[v]>d[u]+w)
{
d[v]=d[u]+w;
q.push({-d[v],v});
}
}
}
}
int main()
{
cin>>n>>m>>x;
for(ll i=1;i<=m;i++)
{
cin>>a[i]>>b[i]>>c[i];
e[a[i]].push_back({b[i],c[i]});
}
dijkstra(x);
for(ll i=1;i<=n;i++) ans[i]=d[i];
memset(vis,0,sizeof(vis));
memset(d,0,sizeof(d));
memset(e,0,sizeof(e));
for(ll i=1;i<=m;i++)
{
e[b[i]].push_back({a[i],c[i]});
}
dijkstra(x);
ll anss=0;
for(ll i=1;i<=n;i++)
{
anss=max(d[i]+ans[i],anss);
}
cout<<anss;
return 0;
}