#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int inf = 1e9 + 9;
const int MOD = 1e9 + 696969;
const long long int INF = 4e18 + 3;
int n, m;
const int maxn = 1000100;
vector<pair<int, int> > v[maxn];
vector<pair<int, int> > rev[maxn];
vector<int> top;
vector<int> skl[maxn];
bool odw[maxn];
int SKL[maxn], CC, start;
long long int dp[maxn];
void dfs(int x) {
  odw[x] = 1;
  for (auto u : v[x])
    if (!odw[u.first]) dfs(u.first);
  top.push_back(x);
}
void revdfs(int x, int spoj) {
  odw[x] = 1;
  for (auto u : rev[x])
    if (!odw[u.first]) revdfs(u.first, spoj);
  SKL[x] = spoj;
  skl[spoj].push_back(x);
}
long long int value[maxn];
long long int elo[maxn];
inline long long int f(long long int wartosc) {
  long long int x = 0, y = 1000000;
  while (x < y) {
    long long int mid = (x + y) / 2 + 1;
    if (wartosc - mid * (mid - 1) / 2 < 0)
      y = --mid;
    else
      x = mid;
  }
  return x * wartosc - elo[x];
}
int A[maxn], B[maxn], C[maxn];
int main() {
  elo[1] = 0;
  elo[2] = 1;
  for (int i = 3; i <= 100000; ++i)
    elo[i] = elo[i - 1] + (long long int)i * (long long int)(i - 1) / 2;
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = (1); i <= (n); ++i)
    v[0].push_back(make_pair(i, 0)), rev[i].push_back(make_pair(0, 0));
  for (int i = (1); i <= (m); ++i) {
    int a, b, c;
    cin >> a >> b >> c;
    v[a].push_back(make_pair(b, c));
    rev[b].push_back(make_pair(a, c));
    A[i] = a;
    B[i] = b;
    C[i] = c;
  }
  dfs(0);
  cin >> start;
  fill(odw, odw + n + 5, 0);
  reverse(top.begin(), top.end());
  for (auto u : top)
    if (!odw[u]) ++CC, revdfs(u, CC);
  for (int i = (1); i <= (m); ++i)
    if (SKL[A[i]] == SKL[B[i]]) value[SKL[A[i]]] += f(C[i]);
  for (int i = CC; i > 0; --i) {
    long long int best = 0;
    for (auto ktory : skl[i])
      for (auto u : v[ktory])
        if (SKL[ktory] != SKL[u.first])
          best = max(best, u.second + dp[SKL[u.first]]);
    dp[i] = value[i] + best;
  }
  cout << dp[SKL[start]];
}
