#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e6 + 1;
vector<pair<int, long long> > T[N];
long long f(long long t) { return (t * (t - 1)) / 2; }
long long prec[N];
long long calc(long long x) {
  long long l = 0ll, r = (long long)1e5;
  long long md;
  long long value;
  while (r - l > 1) {
    md = (l + r) / 2;
    value = f(md);
    if (value <= x) {
      l = md;
    } else {
      r = md;
    }
  }
  return (x * l) - prec[l];
}
bool ok[N];
vector<int> ord;
void dfs1(int u) {
  if (ok[u]) return;
  ok[u] = true;
  for (auto x : T[u]) {
    dfs1(x.first);
  }
  ord.push_back(u);
}
vector<pair<int, long long> > R[N];
int bel[N];
int cnt = 0;
void dfs2(int u) {
  if (bel[u] != 0) return;
  bel[u] = cnt;
  for (auto x : R[u]) {
    dfs2(x.first);
  }
}
vector<pair<int, long long> > G[N];
int deg[N];
long long nval[N];
long long dp[N];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  for (int i = 1; i < N; i++) {
    prec[i] = prec[i - 1] + f(i);
  }
  int n, m;
  cin >> n >> m;
  int u, v, w;
  for (int i = 0; i < m; i++) {
    cin >> u >> v >> w;
    T[u].push_back(make_pair(v, w));
    R[v].push_back(make_pair(u, w));
  }
  int start;
  cin >> start;
  dfs1(start);
  int las_node;
  while (!ord.empty()) {
    las_node = ord.back();
    ord.pop_back();
    if (bel[las_node] != 0) continue;
    ++cnt;
    dfs2(las_node);
  }
  for (int i = 1; i <= n; i++) {
    if (!ok[i]) continue;
    for (auto x : T[i]) {
      if (bel[i] == bel[x.first]) {
        nval[bel[i]] += calc(x.second);
      } else {
        G[bel[i]].push_back(make_pair(bel[x.first], x.second));
        deg[bel[x.first]]++;
      }
    }
  }
  queue<int> vv;
  vv.push(bel[start]);
  dp[bel[start]] = nval[bel[start]];
  int node;
  while (!vv.empty()) {
    node = vv.front();
    vv.pop();
    for (auto x : G[node]) {
      dp[x.first] = max(dp[x.first], dp[node] + nval[x.first] + x.second);
      deg[x.first]--;
      if (deg[x.first] == 0) {
        vv.push(x.first);
      }
    }
  }
  long long ret = 0;
  for (int i = 1; i <= n; i++) {
    ret = max(ret, dp[i]);
  }
  cout << ret << "\n";
  return 0;
}
