#include <bits/stdc++.h>
using namespace std;
const long long N = 1010101;
const long long qwq = 303030;
const long long inf = 0x3f3f3f3f;
long long n, m, s;
struct E {
  long long to, we;
};
vector<E> e[N];
vector<E> d[N];
long long belong[N], dfn[N], low[N];
long long st[N], cnt, tim, in[N];
long long f[N], a[N];
inline long long read() {
  long long sum = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    sum = sum * 10 + c - '0';
    c = getchar();
  }
  return sum * f;
}
void tarjan(long long u) {
  dfn[u] = low[u] = ++tim;
  st[++cnt] = u;
  in[u] = 1;
  for (long long i = 0; i < e[u].size(); i++) {
    long long v = e[u][i].to;
    if (!dfn[v]) {
      tarjan(v);
      low[u] = min(low[u], low[v]);
    } else if (in[v])
      low[u] = min(low[u], dfn[v]);
  }
  if (dfn[u] == low[u]) {
    while (2333) {
      long long v = st[cnt--];
      in[v] = 0;
      belong[v] = u;
      if (u == v) break;
    }
  }
}
long long DFS(long long u) {
  if (f[u]) return f[u];
  f[u] = a[u];
  long long big = 0;
  for (long long i = 0; i < d[u].size(); i++) {
    long long v = d[u][i].to;
    long long w = d[u][i].we;
    big = max(big, DFS(v) + w);
  }
  return f[u] = f[u] + big;
}
long long qiu(long long w) {
  long long t = sqrt((double)w * 2 + 0.25) - 0.5;
  return w * (t + 1) - (t + 1) * (t + 2) * t / 6;
}
int main() {
  int x, y, z;
  n = read();
  m = read();
  while (m--) {
    x = read();
    y = read();
    z = read();
    e[x].push_back((E){y, z});
  }
  s = read();
  for (long long i = 1; i <= n; i++)
    if (!dfn[i]) tarjan(i);
  for (long long u = 1; u <= n; u++) {
    for (long long i = 0; i < e[u].size(); i++) {
      long long v = e[u][i].to;
      long long w = e[u][i].we;
      if (belong[v] == belong[u])
        a[belong[u]] += qiu(w);
      else
        d[belong[u]].push_back((E){belong[v], w});
    }
  }
  cout << DFS(belong[s]);
  return 0;
}
