#include <bits/stdc++.h>
using namespace std;
long long modpow(long long a, long long b,
                 long long mod = (long long)(1e9 + 7)) {
  if (!b) return 1;
  a %= mod;
  return modpow(a * a % mod, b / 2, mod) * (b & 1 ? a : 1) % mod;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int mxn = 1e6;
int n, m, t, cm;
vector<int> adj[mxn], dfst, adjax[mxn];
long long dp[mxn];
int a[mxn], b[mxn], c[mxn], cc[mxn], tin[mxn], fup[mxn];
bool on_stack[mxn];
void init() {
  t = 0, cm = 0;
  for (int i = 0; i < mxn; i++)
    dp[i] = 0, on_stack[i] = 0, cc[i] = tin[i] = fup[i] = -1;
}
long long demo(int x) {
  int lo = 0, hi = 20000;
  while (lo <= hi) {
    int mid = (lo + hi) / 2;
    if (mid * (mid + 1) / 2 <= x)
      lo = mid + 1;
    else
      hi = mid - 1;
  }
  int num = lo - 1;
  return 1LL * x * (num + 1) - 1LL * num * (num + 1) * (num + 2) / 6;
}
void constru() {
  for (int i = 0; i < cm; i++) on_stack[i] = 0;
  for (int e = 0; e < m; e++) {
    if (cc[a[e]] == cc[b[e]])
      dp[cc[a[e]]] += demo(c[e]);
    else
      adjax[cc[a[e]]].push_back(e);
  }
}
void dfs(int v) {
  tin[v] = fup[v] = t++;
  dfst.push_back(v);
  on_stack[v] = 1;
  for (int e : adj[v]) {
    int w = a[e] ^ b[e] ^ v;
    if (tin[w] == -1) {
      dfs(w);
      (fup[v]) = min((fup[v]), (fup[w]));
    } else if (on_stack[w])
      (fup[v]) = min((fup[v]), (tin[w]));
  }
  if (tin[v] == fup[v]) {
    while (dfst.back() != v) {
      on_stack[dfst.back()] = 0;
      cc[dfst.back()] = cm;
      dfst.pop_back();
    }
    dfst.pop_back();
    on_stack[v] = 0;
    cc[v] = cm++;
  }
}
long long dfsDp(int v) {
  if (on_stack[v]) return dp[v];
  long long x = dp[v];
  on_stack[v] = 1;
  for (int e : adjax[v]) {
    int w = cc[a[e]] ^ cc[b[e]] ^ v;
    (dp[v]) = max((dp[v]), (x + dfsDp(w) + c[e]));
  }
  return dp[v];
}
void solve() {
  scanf("%d", &n);
  scanf("%d", &m);
  for (int i = 0; i < m; i++) {
    scanf("%d", &a[i]);
    scanf("%d", &b[i]);
    scanf("%d", &c[i]);
    adj[--a[i]].push_back(i);
    b[i]--;
  }
  init();
  for (int i = 0; i < n; i++)
    if (tin[i] == -1) dfs(i);
  constru();
  int s;
  scanf("%d", &s);
  cout << dfsDp(cc[s - 1]) << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  solve();
  return 0;
}
