#include <bits/stdc++.h>
using namespace std;
const int P = 1e6;
const int N = 2e6 + 5;
const int M = 2e6 + 5;
const int inf = 0x3f3f3f3f;
struct edge {
  int f, t, next;
  long long v;
} e[M];
int n, m, tot, all, s, cnt, head[N], dfn[N], low[N], st[N], id[N];
int dindex;
bool inst[N];
long long num[N], sum[100005], val[N];
void add(int f, int t, long long v) {
  e[tot].f = f;
  e[tot].t = t;
  e[tot].v = v;
  e[tot].next = head[f];
  head[f] = tot++;
}
void tarjan(int v) {
  dindex++;
  dfn[v] = low[v] = dindex;
  st[all++] = v;
  inst[v] = true;
  for (int i = head[v]; ~i; i = e[i].next) {
    int nx = e[i].t;
    if (!dfn[nx]) {
      tarjan(nx);
      low[v] = min(low[v], low[nx]);
    } else if (inst[nx])
      low[v] = min(low[v], dfn[nx]);
  }
  if (dfn[v] == low[v]) {
    cnt++;
    while (1) {
      int cur = st[--all];
      inst[cur] = false;
      id[cur] = cnt;
      if (cur == v) break;
    }
  }
}
long long work(long long x) {
  long long ans = 0;
  int item = lower_bound(num, num + 15001, x) - num;
  ans -= sum[item];
  ans += x * (item + 1);
  ans += num[item] - x;
  return ans;
}
long long dfs(int v) {
  long long res = 0;
  dfn[v] = 1;
  for (int i = head[v]; ~i; i = e[i].next) {
    int nx = e[i].t;
    if (!dfn[nx])
      res = max(res, e[i].v + dfs(nx));
    else
      res = max(res, val[nx] + e[i].v);
  }
  val[v] += res;
  return val[v];
}
int main() {
  num[1] = 1;
  cnt = 0;
  all = 0;
  tot = 0;
  dindex = 0;
  for (int i = 1; i <= 15000; i++)
    num[i] = num[i - 1] + i, sum[i] = sum[i - 1] + num[i];
  memset(head, -1, sizeof(head));
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int f, t;
    long long v;
    scanf("%d%d%lld", &f, &t, &v);
    add(f, t, v);
  }
  scanf("%d", &s);
  tarjan(s);
  int up = tot;
  for (int i = 0; i < up; i++) {
    int a = e[i].f, b = e[i].t;
    if (!id[a] || !id[b]) continue;
    if (id[a] == id[b])
      val[id[a] + P] += work(e[i].v);
    else if (id[a] < id[b])
      add(id[b] + P, id[a] + P, e[i].v);
    else
      add(id[a] + P, id[b] + P, e[i].v);
  }
  long long ans = dfs(id[s] + P);
  printf("%lld\n", ans);
  return 0;
}
