#include <bits/stdc++.h>
using namespace std;
long long grzybki[1000007] = {};
vector<int> odp;
vector<pair<int, int>> graf[1000007];
vector<int> odwr[1000007];
vector<int> kolejnosc;
int sp[1000007] = {};
bool visited[1000007];
int visited2[1000007] = {};
vector<pair<int, int>> DAG[1000007];
long long ans[1000007] = {};
int next(long long x) {
  long long start = 0;
  long long koniec = x;
  long long ans = -1;
  while (start <= koniec) {
    long long mid = (start + koniec) / 2;
    if (mid * (mid + 1) / 2 > x)
      koniec = mid - 1;
    else {
      ans = mid;
      start = mid + 1;
    }
  }
  return ans;
}
void SCC(int x, int kol) {
  sp[x] = kol;
  for (int i = 0; i < odwr[x].size(); i++) {
    if (sp[odwr[x][i]] == 0) {
      SCC(odwr[x][i], kol);
    }
  }
}
void dfs(int s) {
  if (visited[s]) return;
  visited[s] = true;
  for (int i = 0; i < graf[s].size(); i++) {
    dfs(graf[s][i].first);
  }
  kolejnosc.push_back(s);
}
void dfs2(int s) {
  if (visited2[s] == 2) return;
  visited2[s] = 1;
  for (int i = 0; i < DAG[s].size(); i++) {
    dfs2(DAG[s][i].first);
  }
  visited2[s] = 2;
  odp.push_back(s);
}
int main() {
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  int n, m, a, b, w, kolor = 0;
  long long grzyb = 0, x = 0;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> a >> b >> w;
    {
      graf[a].push_back({b, w});
      odwr[b].push_back(a);
    }
  }
  int s;
  cin >> s;
  for (int i = 1; i <= n; i++) {
    dfs(i);
  }
  for (int i = kolejnosc.size() - 1; i >= 0; i--) {
    if (sp[kolejnosc[i]] == 0) {
      SCC(kolejnosc[i], ++kolor);
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < graf[i].size(); j++) {
      if (sp[i] != sp[graf[i][j].first]) {
        DAG[sp[i]].push_back({sp[graf[i][j].first], graf[i][j].second});
      } else {
        x = next(graf[i][j].second);
        grzybki[sp[i]] +=
            graf[i][j].second * (x + 1) - (x * (x + 1) * (x + 2)) / 6;
      }
    }
  }
  dfs2(sp[s]);
  int z = odp.size() - 1;
  while (odp[z] != sp[s]) z--;
  ans[odp[z]] = grzybki[odp[z]];
  grzyb = grzybki[odp[z]];
  for (int i = z; i >= 0; i--) {
    grzyb = max(grzyb, ans[odp[i]]);
    for (int j = 0; j < DAG[odp[i]].size(); j++) {
      ans[DAG[odp[i]][j].first] =
          max(ans[DAG[odp[i]][j].first], (grzybki[DAG[odp[i]][j].first] +
                                          ans[odp[i]] + DAG[odp[i]][j].second));
    }
  }
  cout << grzyb;
  return 0;
}
