#include <bits/stdc++.h>
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const long long inf = 1e17 + 7;
const long long max_n = 1e6 + 5;
long long n;
vector<pair<long long, long long> > gr[max_n];
vector<long long> g[max_n];
vector<long long> order;
bool used[max_n];
long long col[max_n];
long long v_col = 0;
long long dp[max_n];
long long sum[(long long)1e5];
void top_sort(long long v) {
  if (used[v]) return;
  used[v] = true;
  for (long long i : g[v]) {
    top_sort(i);
  }
  order.emplace_back(v);
}
long long infinite(long long num) {
  long long l = -1;
  long long r = 1e5;
  while (r - l > 1) {
    long long mid = (l + r) / 2;
    if (mid * (mid + 1) / 2 <= num)
      l = mid;
    else
      r = mid;
  }
  return (l + 1) * num - sum[l];
}
long long comp_mush = 0;
void dfs(long long v) {
  if (col[v] != 0) return;
  col[v] = v_col;
  for (auto i : gr[v]) {
    if (col[i.first] != 0 && col[i.first] != v_col)
      dp[v_col] = max(dp[v_col], i.second + dp[col[i.first]]);
    else {
      comp_mush += infinite(i.second);
      dfs(i.first);
    }
  }
}
void solve() {
  for (long long i = 1; i < 1e5; i++) sum[i] = sum[i - 1] + i * (i + 1) / 2;
  long long m;
  cin >> n >> m;
  for (long long i = 0; i < m; i++) {
    long long v1, v2, w;
    cin >> v1 >> v2 >> w;
    v1--;
    v2--;
    gr[v1].emplace_back(v2, w);
    g[v2].emplace_back(v1);
  }
  for (long long i = 0; i < n; i++) top_sort(i);
  for (long long temp = n - 1; temp >= 0; temp--) {
    long long st = order[temp];
    if (col[st] != 0) continue;
    v_col++;
    dfs(st);
    dp[v_col] += comp_mush;
    comp_mush = 0;
  }
  long long s;
  cin >> s;
  cout << dp[col[s - 1]] << endl;
}
signed main() {
  cin.tie(0);
  cout.tie(0);
  ios_base::sync_with_stdio(0);
  cout.precision(10);
  solve();
}
