#include <bits/stdc++.h>
using namespace std;
vector<array<long long int, 2>> g[1000003];
vector<array<long long int, 2>> tg[1000003];
vector<array<long long int, 2>> modified_g[1000003];
long long int scc[1000003];
long long int ans[1000003];
bool vis[1000003];
long long int dp[1000003];
stack<long long int> st;
long long int ctr;
void dfs(long long int node) {
  vis[node] = 1;
  for (auto it : g[node]) {
    if (!vis[it[0]]) {
      dfs(it[0]);
    }
  }
  st.push(node);
}
void tdfs(long long int node) {
  vis[node] = 1;
  scc[node] = ctr;
  for (auto it : tg[node]) {
    if (!vis[it[0]]) {
      tdfs(it[0]);
    }
  }
}
long long int go(long long int node) {
  if (dp[node] != -1) {
    return dp[node];
  }
  long long int res = 0;
  for (auto it : modified_g[node]) {
    res = max(res, it[1] + go(it[0]));
  }
  return dp[node] = res + ans[node];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, m;
  cin >> n >> m;
  for (long long int i = 1; i <= m; i++) {
    long long int x, y, w;
    cin >> x >> y >> w;
    g[x].push_back({y, w});
    tg[y].push_back({x, w});
  }
  long long int start;
  cin >> start;
  for (long long int i = 1; i <= n; i++) {
    if (!vis[i]) {
      dfs(i);
    }
  }
  for (long long int i = 1; i <= n; i++) {
    vis[i] = 0;
  }
  while (!st.empty()) {
    auto node = st.top();
    st.pop();
    if (!vis[node]) {
      ctr++;
      tdfs(node);
    }
  }
  for (long long int i = 1; i <= n; i++) {
    for (auto it : g[i]) {
      if (scc[i] == scc[it[0]]) {
        long long int w = it[1];
        long long int lo = 0;
        long long int hi = 1e5;
        long long int x = 0;
        while (lo <= hi) {
          long long int mid = (lo + hi) / 2;
          long long int val = (mid * (mid + 1ll)) / 2ll;
          if (val <= w) {
            x = mid;
            lo = mid + 1ll;
          } else {
            hi = mid - 1ll;
          }
        }
        ans[scc[i]] += w * (x + 1ll);
        long long int val1 = (x * (x + 1ll) * (2ll * x + 1ll)) / 6ll;
        long long int val2 = (x * (x + 1ll)) / 2ll;
        long long int val = (val1 + val2) / 2ll;
        ans[scc[i]] -= val;
      } else {
        modified_g[scc[i]].push_back({scc[it[0]], it[1]});
      }
    }
  }
  memset(dp, -1, sizeof(dp));
  cout << go(scc[start]) << "\n";
}
