8,9,10 WA
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pr;
const int N = 1e3 + 10;
struct Edge
{
int x, y, dis;
};
int n, m, s;
int x[N], y[N], z[N], dist[N], ans[N];
bool vis[N];
vector<Edge> tr[N];
void dijkstra(int st)
{
for (int i = 1; i <= n; i++)
{
dist[i] = 0x3f3f3f3f;
vis[i] = false;
}
priority_queue<pr, vector<pr>, greater<pr> > q;
dist[st] = 0;
q.push({0, st});
while (q.size())
{
int b = q.top().second;
q.pop();
if (vis[b]) continue;
vis[b] = true;
for (auto j : tr[b])
{
int y = j.y, dist_ = j.dis;
if (dist[y] > dist[b] + dist_)
{
dist[y] = dist[b] + dist_;
q.push({dist[y], y});
}
}
}
}
int main()
{
scanf("%d%d%d", &n, &m, &s);
for (int i = 1; i <= m; i++)
{
scanf("%d%d%d", &x[i], &y[i], &z[i]);
tr[x[i]].push_back({x[i], y[i], z[i]});
}
dijkstra(s);
for (int i = 1; i <= n; i++)
ans[i] = dist[i];
for (int i = 1; i <= n; i++)
tr[i].clear();
for (int i = 1; i <= m; i++)
tr[y[i]].push_back({y[i], x[i], z[i]});
dijkstra(s);
int res = 0;
for (int i = 1; i <= n; i++)
res = max(res, ans[i] + dist[i]);
printf("%d\n", res);
return 0;
}