#include <bits/stdc++.h>
using namespace std;
const int maxn = 2000010;
long long n, m, head[maxn], to[maxn], nextt[maxn], w[maxn], scc[maxn],
    pre[maxn], low[maxn], dfs_clock;
long long tot = 1, f[maxn], cnt, head2[maxn], tot2 = 1, nextt2[maxn], to2[maxn],
          w2[maxn], tott;
long long bg, ans, dp[maxn];
bool vis[maxn];
struct node {
  long long x, y, z;
} e[maxn];
void add(long long x, long long y, long long z) {
  to[tot] = y;
  w[tot] = z;
  nextt[tot] = head[x];
  head[x] = tot++;
}
void Add(long long x, long long y, long long z) {
  w2[tot2] = z;
  to2[tot2] = y;
  nextt2[tot2] = head2[x];
  head2[x] = tot2++;
}
stack<long long> s;
void tarjan(int u) {
  pre[u] = low[u] = ++dfs_clock;
  s.push(u);
  for (int i = head[u]; i; i = nextt[i]) {
    int v = to[i];
    if (!pre[v]) {
      tarjan(v);
      low[u] = min(low[u], low[v]);
    } else if (!scc[v])
      low[u] = min(low[u], pre[v]);
  }
  if (pre[u] == low[u]) {
    cnt++;
    while (1) {
      int t = s.top();
      s.pop();
      scc[t] = cnt;
      if (t == u) break;
    }
  }
}
long long solve(long long x) {
  long long t = (long long)floor((-1.0 + sqrt(1.0 + 8 * x)) / 2);
  long long s = (t + 1) * x - t * (t + 1) * (t + 2) / 6;
  return s;
}
void dfs(long long u) {
  for (long long i = head2[u]; i; i = nextt2[i]) {
    long long v = to2[i];
    f[v] = max(f[u] + w2[i], f[v]);
    dfs(v);
  }
}
long long dfss(int u) {
  if (dp[u] != -1) return dp[u];
  long long res = f[u];
  for (long long i = head2[u]; i; i = nextt2[i]) {
    long long v = to2[i];
    res = max(res, f[u] + w2[i] + dfss(v));
  }
  dp[u] = res;
  return res;
}
int main() {
  scanf("%I64d%I64d", &n, &m);
  for (int i = 1; i <= m; i++) {
    long long a, b, c;
    scanf("%I64d%I64d%I64d", &a, &b, &c);
    e[++tott].x = a;
    e[tott].y = b;
    e[tott].z = c;
    add(a, b, c);
  }
  scanf("%I64d", &bg);
  for (int i = 1; i <= n; i++)
    if (!pre[i]) tarjan(i);
  for (long long i = 1; i <= tott; i++) {
    long long x = e[i].x, y = e[i].y, z = e[i].z;
    if (scc[x] == scc[y]) f[scc[x]] += solve(z);
  }
  for (long long i = 1; i <= n; i++)
    for (long long j = head[i]; j; j = nextt[j]) {
      long long v = to[j];
      if (scc[i] != scc[v]) {
        Add(scc[i], scc[v], w[j]);
      }
    }
  for (long long i = 1; i <= cnt; i++) dp[i] = -1;
  ans = dfss(scc[bg]);
  printf("%I64d\n", ans);
  return 0;
}
