#include <bits/stdc++.h>
using namespace std;
const int M = 1e6 + 10;
long long int n, m, c, vaz[M], dp[M], dp2[M], dpm[M], mark[M], vis[M], del[M],
    col[M], strt, sss;
vector<pair<long long int, long long int> > og[M], rg[M], g[M];
vector<long long int> ww, nd[M], st;
long long int f() {
  long long int ret = 0ll;
  for (auto x : ww) {
    long long int l = 1, r = x, mid;
    while (r - l > 1) {
      mid = (l + r) / 2;
      if (mid * (mid + 1) / 2ll <= x)
        l = mid;
      else
        r = mid;
    }
    ret += x * (l + 1) - dp2[l];
  }
  return ret;
}
void sfill(long long int v) {
  mark[v] = true;
  for (auto u : og[v])
    if (!mark[u.first]) sfill(u.first);
  st.push_back(v);
}
void dfs(long long int v) {
  col[v] = c;
  nd[c].push_back(v);
  if (v == sss) strt = c;
  for (auto u : rg[v]) {
    if (!col[u.first]) dfs(u.first);
    if (col[u.first] == c && u.second) {
      ww.push_back(u.second);
      u.second = 0ll;
    }
  }
}
long long int mem(long long int v) {
  if (vis[v]) return dp[v];
  vis[v] = true;
  for (auto u : g[v])
    if (u.first != v) dp[v] = max(dp[v], mem(u.first) + u.second);
  return dp[v] += vaz[v];
}
int main() {
  for (int i = 1; i < M; i++)
    dpm[i] = dpm[i - 1] + i, dp2[i] = dp2[i - 1] + dpm[i];
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    long long int u, v, w;
    scanf("%lld%lld%lld", &u, &v, &w);
    og[u].push_back({v, w});
    rg[v].push_back({u, w});
  }
  cin >> sss;
  for (long long int i = 1; i <= n; i++)
    if (!mark[i]) sfill(i);
  for (long long int i = st.size() - 1; i >= 0; i--)
    if (!col[st[i]]) {
      c++;
      ww.clear();
      dfs(st[i]);
      vaz[c] = f();
    }
  for (long long int i = 1; i <= c; i++)
    for (auto v : nd[i])
      for (auto u : og[v])
        if (col[u.first] != i) g[i].push_back({col[u.first], u.second});
  cout << mem(strt) << endl;
  return 0;
}
