#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  x = 0;
  register char c = getchar();
  bool f = 0;
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  if (c == '-') c = getchar(), f = 1;
  while (c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
  x = f ? -x : x;
  return;
}
template <class T>
inline void write(T x) {
  if (!x) {
    putchar(48);
    return;
  }
  if (x < 0) x = -x, putchar('-');
  int len = -1, z[20];
  while (x > 0) z[++len] = x % 10, x /= 10;
  for (register int i = len; i >= 0; i--) putchar(z[i] + 48);
  return;
}
const int N = 1e6 + 10;
struct node {
  int to, nxt, w;
} g[N];
int lst[N], gl;
void add(int x, int y, int z) {
  g[++gl] = (node){y, lst[x], z};
  lst[x] = gl;
}
int n, m;
long long calc(long long x) {
  long long tt = sqrt(2 * x + 0.25) - 0.5;
  return x + tt * x - (tt + 1) * (tt + 2) * tt / 6;
}
int tim, dfn[N], low[N], cnt, bel[N];
stack<int> stk;
bool in[N];
void tarjan(int u) {
  low[u] = dfn[u] = ++tim;
  stk.push(u);
  in[u] = 1;
  for (int i = lst[u]; i; i = g[i].nxt) {
    int v = g[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 (low[u] == dfn[u]) {
    cnt++;
    while (in[u]) {
      bel[stk.top()] = cnt;
      in[stk.top()] = 0;
      stk.pop();
    }
  }
}
vector<pair<int, int> > e[N];
long long val[N], f[N];
long long dfs(int u) {
  if (f[u]) return f[u];
  for (auto v : e[u]) f[u] = max(f[u], dfs(v.first) + v.second);
  f[u] += val[u];
  return f[u];
}
int main() {
  read(n), read(m);
  for (int i = 1, x, y, z; i <= m; i++) {
    read(x), read(y), read(z);
    add(x, y, z);
  }
  for (int i = 1; i <= n; i++)
    if (!dfn[i]) tarjan(i);
  for (int i = 1; i <= n; i++)
    for (int j = lst[i]; j; j = g[j].nxt) {
      int v = g[j].to;
      if (bel[i] == bel[v])
        val[bel[i]] += calc(g[j].w);
      else
        e[bel[i]].push_back(make_pair(bel[v], g[j].w));
    }
  int s;
  read(s);
  printf("%lld\n", dfs(bel[s]));
  return 0;
}
