#include <bits/stdc++.h>
using namespace std;
vector<pair<int, long long> > A[1000000];
vector<int> T[1000000];
int n, m;
bool visited[1000000] = {0};
vector<int> DFSList;
void dfs(int u) {
  visited[u] = true;
  for (int i = 0; i < A[u].size(); i++) {
    if (!visited[A[u][i].first]) {
      dfs(A[u][i].first);
    }
  }
  DFSList.push_back(u);
}
int parent[1000000];
bool sccvis[1000000] = {0};
void findSCC(int u, int P) {
  sccvis[u] = true;
  parent[u] = P;
  for (int i = 0; i < T[u].size(); i++) {
    if (!sccvis[T[u][i]]) {
      findSCC(T[u][i], P);
    }
  }
}
long long getMaxOfEdge(long long x) {
  long long n;
  long long delta = 1 + 8 * x;
  n = (-1 + sqrt(delta)) / 2;
  return x * (n + 1) - n * (n + 1) * (n + 2) / 6;
}
long long Ans[1000000];
long long sumDag[1000000] = {0};
vector<pair<int, long long> > dagAlis[1000000];
long long getAns(int u) {
  if (Ans[u] != -1) return Ans[u];
  long long ans = 0;
  for (int i = 0; i < dagAlis[u].size(); i++) {
    int v = dagAlis[u][i].first;
    long long x = dagAlis[u][i].second + getAns(v);
    if (x > ans) ans = x;
  }
  ans += sumDag[u];
  Ans[u] = ans;
  return ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    A[u - 1].push_back({v - 1, w});
    T[v - 1].push_back(u - 1);
  }
  int startin;
  cin >> startin;
  for (int u = 0; u < n; u++) {
    if (!visited[u]) dfs(u);
  }
  int dagsize = 0;
  while (DFSList.size() > 0) {
    int u = DFSList[DFSList.size() - 1];
    DFSList.pop_back();
    if (!sccvis[u]) findSCC(u, dagsize++);
  }
  for (int u = 0; u < n; u++) {
    for (int i = 0; i < A[u].size(); i++) {
      int v = A[u][i].first;
      if (parent[u] == parent[v])
        sumDag[parent[u]] += getMaxOfEdge(A[u][i].second);
      else {
        dagAlis[parent[u]].push_back({parent[v], A[u][i].second});
      }
    }
  }
  memset(Ans, -1, 8 * 1000000);
  cout << getAns(parent[startin - 1]) << endl;
}
