#include <bits/stdc++.h>
using namespace std;
const int N = 1000005, M = 1000005;
int n, m, s, edgenum, top, tim, num, head[N], Next[M], vet[M], dfn[N], low[N],
    st[N], scc[N], x[M], y[M], deg[N], edgenum2, head2[N], Next2[M], vet2[M];
long long ans, val[M], cost[N], d[N], z[M], val2[M];
bool vis[N];
queue<int> q;
void add(int u, int v, long long w) {
  edgenum++;
  Next[edgenum] = head[u];
  vet[edgenum] = v;
  val[edgenum] = w;
  head[u] = edgenum;
}
void add2(int u, int v, long long w) {
  edgenum2++;
  Next2[edgenum2] = head2[u];
  vet2[edgenum2] = v;
  val2[edgenum2] = w;
  head2[u] = edgenum2;
}
void tarjan(int u) {
  dfn[u] = low[u] = ++tim;
  st[++top] = u;
  vis[u] = 1;
  for (int e = head[u]; e; e = Next[e]) {
    int v = vet[e];
    if (!dfn[v]) {
      tarjan(v);
      low[u] = min(low[u], low[v]);
    } else if (vis[v])
      low[u] = min(low[u], dfn[v]);
  }
  if (low[u] == dfn[u]) {
    ++num;
    while (st[top + 1] != u) {
      scc[st[top]] = num;
      vis[st[top--]] = 0;
    }
  }
}
void spfa(int s) {
  for (int i = 1; i <= num; i++) d[i] = -1e18;
  d[s] = cost[s];
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int e = head2[u]; e; e = Next2[e]) {
      int v = vet2[e];
      deg[v]--;
      if (!deg[v]) q.push(v);
      d[v] = max(d[v], d[u] + val2[e]);
    }
  }
}
long long calc(long long x) {
  long long tmp = 0, l = 1, r = sqrt(2LL * x) * 2LL;
  while (l <= r) {
    long long mid = (l + r) / 2;
    if (mid * (mid + 1LL) / 2LL <= x) {
      tmp = mid;
      l = mid + 1;
    } else
      r = mid - 1;
  }
  long long res = tmp * x + x - tmp * (tmp + 1LL) * (tmp + 2LL) / 6LL;
  return res;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) scanf("%d%d%lld", &x[i], &y[i], &z[i]);
  for (int i = 1; i <= m; i++) add(x[i], y[i], z[i]);
  scanf("%d", &s);
  for (int i = 1; i <= n; i++)
    if (!dfn[i]) tarjan(i);
  for (int i = 1; i <= m; i++) {
    if (scc[x[i]] == scc[y[i]]) {
      cost[scc[x[i]]] += calc(z[i]);
    }
  }
  for (int u = 1; u <= n; u++) {
    for (int e = head[u]; e; e = Next[e]) {
      int v = vet[e];
      if (scc[u] != scc[v]) {
        add2(scc[u], scc[v], val[e] + cost[scc[v]]);
        deg[scc[v]]++;
      }
    }
  }
  for (int i = 1; i <= num; i++)
    if (!deg[i]) q.push(i);
  spfa(scc[s]);
  for (int i = 1; i <= num; i++) ans = max(ans, d[i]);
  printf("%lld", ans);
  return 0;
}
