#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 7;
vector<long long int> g[MAXN], w[MAXN], rg[MAXN], cg[MAXN];
vector<pair<long long int, pair<long long int, long long int> > > edge;
long long int mark[MAXN], cnt = 0, compsz[MAXN], cal[MAXN], dp[MAXN];
stack<long long int> st;
void dfs(long long int x, long long int c) {
  mark[x] = c;
  if (c == -1) {
    for (long long int y : g[x]) {
      if (mark[y] == 0) dfs(y, c);
    }
  } else {
    for (long long int y : rg[x]) {
      if (mark[y] == 0) dfs(y, c);
    }
  }
  if (c == -1) st.push(x);
}
bool used[MAXN];
vector<long long int> ans;
void DFS(long long int x) {
  used[x] = 1;
  for (long long int y : cg[x]) {
    if (!used[y]) DFS(y);
  }
  ans.push_back(x);
}
long long int calc(long long int x) {
  x = 2 * x;
  long long int l = 0, r = 1e5;
  while (r - l > 1) {
    long long int mid = (l + r) / 2;
    if (mid * (mid + 1) <= x)
      l = mid;
    else
      r = mid;
  }
  x /= 2;
  return ((r)*x - cal[r - 1]);
}
int main() {
  cal[1] = 1;
  for (long long int i = 2; i <= 15000; i++)
    cal[i] = cal[i - 1] + ((i * (i + 1)) / 2);
  long long int n, m, s;
  scanf("%lld%lld", &n, &m);
  for (long long int i = 0; i < m; i++) {
    long long int x, y, z;
    scanf("%lld%lld%lld", &x, &y, &z);
    g[x].push_back(y);
    rg[y].push_back(x);
    edge.push_back({z, {x, y}});
  }
  scanf("%lld", &s);
  for (long long int i = 1; i <= n; i++) {
    if (mark[i] == 0) {
      dfs(i, -1);
    }
  }
  fill(mark, mark + MAXN, 0);
  while ((long long int)((st).size())) {
    long long int x = st.top();
    st.pop();
    cnt++;
    if (mark[x] == 0) {
      dfs(x, cnt);
    }
  }
  for (auto ed : edge) {
    long long int x = ed.second.first, y = ed.second.second, z = ed.first;
    if (mark[x] != mark[y]) {
      cg[mark[x]].push_back(mark[y]);
      w[mark[x]].push_back(z);
      continue;
    }
    compsz[mark[x]] += calc(z);
  }
  DFS(mark[s]);
  reverse(ans.begin(), ans.end());
  dp[mark[s]] = compsz[mark[s]];
  for (long long int i = 0; i < (long long int)((ans).size()); i++) {
    long long int x = ans[i];
    for (long long int j = 0; j < (long long int)((cg[x]).size()); j++) {
      long long int y = cg[x][j];
      dp[y] = max(dp[y], dp[x] + compsz[y] + w[x][j]);
    }
  }
  long long int maxx = 0;
  for (long long int x : ans) maxx = max(dp[x], maxx);
  cout << maxx;
}
