#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e6 + 60;
int n, m, s, cnt, num[Maxn], low[Maxn], tp[Maxn], n2;
stack<int> st;
vector<pair<int, long long> > adj[Maxn], adj2[Maxn];
vector<int> gr[Maxn];
long long f[Maxn], val[Maxn], res[Maxn];
void DFS(int u) {
  st.push(u);
  num[u] = low[u] = ++cnt;
  for (pair<int, long long> p : adj[u]) {
    int v = p.first;
    if (tp[v] == 0) {
      if (num[v] != 0) {
        low[u] = min(low[u], num[v]);
      } else {
        DFS(v);
        low[u] = min(low[u], low[v]);
      }
    }
  }
  if (num[u] == low[u]) {
    ++n2;
    int v;
    do {
      v = st.top();
      st.pop();
      tp[v] = n2;
      gr[tp[v]].push_back(v);
    } while (v != u);
  }
}
long long Sum(long long x) {
  long long l = 0;
  long long r = Maxn - 60;
  while (l <= r) {
    long long m = (l + r) / 2;
    if (x - (0 + m) * (m + 1) / 2 > 0) {
      l = m + 1;
    } else {
      r = m - 1;
    }
  }
  return x * (r + 1) - f[r];
}
long long dfs(int u) {
  if (!res[u]) {
    for (pair<int, long long> p : adj2[u]) {
      int v = p.first;
      long long w = p.second;
      res[u] = max(res[u], dfs(v) + w);
    }
    res[u] += val[u];
  }
  return res[u];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    long long z;
    cin >> u >> v >> z;
    adj[u].push_back(pair<int, long long>(v, z));
  }
  cin >> s;
  DFS(s);
  for (int k = 1; k < Maxn - 59; k++) {
    f[k] = f[k - 1] + 1ll * (0 + k) * (k + 1) / 2;
  }
  for (int i = 1; i <= n2; i++) {
    for (int u : gr[i]) {
      for (pair<int, long long> p : adj[u]) {
        int v = p.first;
        long long w = p.second;
        if (tp[v] != tp[u]) {
          adj2[tp[u]].push_back(pair<int, long long>(tp[v], w));
        } else {
          val[tp[u]] += Sum(w);
        }
      }
    }
  }
  cout << dfs(tp[s]);
}
