#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long a = 0, b = getchar(), c = 1;
  while (!isdigit(b)) c = b == '-' ? -1 : 1, b = getchar();
  while (isdigit(b)) a = a * 10 + b - '0', b = getchar();
  return a * c;
}
const int N = 1e6 + 5;
int b[N], v[N], c[N], f[N], tot, n, m, s, x, y, z, dfn[N], ad[N], cnt, ac[N],
    ab[N], top, scc, B[N], V[N], C[N], F[N], ctn;
bool in[N];
long long dp[N], is[N];
void add(int x, int y, int z) {
  v[++tot] = y, f[tot] = b[x], c[tot] = z, b[x] = tot;
}
void gao(int x) {
  dfn[x] = ad[x] = ++cnt;
  in[x] = 1, ac[++top] = x;
  for (int i = b[x]; i; i = f[i])
    if (!dfn[v[i]]) {
      gao(v[i]);
      ad[x] = min(ad[x], ad[v[i]]);
    } else if (in[v[i]])
      ad[x] = min(ad[x], dfn[v[i]]);
  if (dfn[x] == ad[x]) {
    in[x] = 0;
    ab[x] = ++scc;
    while (ac[top] != x) {
      ab[ac[top]] = scc;
      in[ac[top--]] = 0;
    }
    top--;
  }
}
long long gg(long long x) {
  long long l = 0, r = 30000;
  while (l + 1 < r) {
    long long mid = l + r >> 1;
    if (mid * (mid + 1) / 2 <= x)
      l = mid;
    else
      r = mid;
  }
  return (l + 1) * x - l * (l + 1) * (l + 2) / 6;
}
void add1(int x, int y, int z) {
  V[++ctn] = y, C[ctn] = z, F[ctn] = B[x], B[x] = ctn;
}
void jj(int x) {
  if (dp[x] != -1) return;
  dp[x] = is[x];
  for (int i = B[x]; i; i = F[i]) {
    jj(V[i]);
    dp[x] = max(dp[x], is[x] + dp[V[i]] + C[i]);
  }
}
int main() {
  n = read(), m = read();
  for (int i = 0; i < m; i++) {
    x = read(), y = read(), z = read();
    add(x, y, z);
  }
  s = read();
  for (int i = 1; i <= n; i++)
    if (!dfn[i]) gao(i);
  for (int i = 1; i <= n; i++)
    for (int j = b[i]; j; j = f[j])
      if (ab[i] == ab[v[j]])
        is[ab[i]] += gg(c[j]);
      else
        add1(ab[i], ab[v[j]], c[j]);
  for (int i = 1; i <= n; i++) dp[i] = -1;
  jj(ab[s]);
  printf("%lld", dp[ab[s]]);
  return 0;
}
