#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define siz(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
#define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
const int maxN = 1e6+5;
int n, m, start, vst[maxN], f[maxN], scc_id[maxN], val[maxN], dem = 0, dp[maxN];
vector<pair<int,int>>adj[maxN], rev_adj[maxN];
set<pair<int,int>>compress[maxN];
vector<int>ord;
void prep()
{
for(int i=1; i<=1e6; i+=1)
{
int xet = i*(i+1) / 2;
f[i]=f[i-1]+xet;
}
}
int cal(int x)
{
int tmp = sqrt(8*x + 1);
int res = (tmp - 1) / 2;
return res;
}
// n*(n+1) / 2 = x -> n*n + n = 2x
// -> 4n*n + 4n = 8x -> 8x + 1 = (2n+1)*(2n+1)
// ->sqrt(8x+1) = (2n+1)
void dfs1(int u)
{
vst[u] = 1;
for(auto i: adj[u])
{
if(!vst[i.fi]) dfs1(i.fi);
}
ord.push_back(u);
}
void dfs2(int u)
{
vst[u] = 1;
scc_id[u] = dem;
for(auto i: rev_adj[u])
{
if(!vst[i.fi]) dfs2(i.fi);
}
}
void dfs3(int u, int v)
{
vst[u] = 1;
for(auto i: compress[u])
{
if(i.fi == v) continue;
if(!vst[i.fi]) dfs3(i.fi, u);
dp[u] = max(dp[u], val[u] + dp[i.fi] + i.se);
}
}
void solve()
{
for(int i=1; i<=n; i+=1)
{
if(!vst[i]) dfs1(i);
}
reverse(all(ord));
for(int i=1; i<=n; i+=1) vst[i] = 0;
for(auto i: ord)
{
if(!vst[i])
{
dem++; dfs2(i);
}
}
for(int i=1; i<=n; i+=1)
{
for(auto [j, w]: adj[i])
{
if(scc_id[j] == scc_id[i])
{
val[scc_id[i]] += w * (cal(w) + 1) - f[cal(w)];
}
else compress[scc_id[i]].insert({scc_id[j], w});
}
}
for(int i=1; i<=dem; i+=1) dp[i] = val[i];
for(int i=1; i<=n; i+=1) vst[i] = 0;
for(int i=1; i<=dem; i+=1)
{
if(!vst[i]) dfs3(i, 0);
}
cout<<dp[start]<<'\n';
}
// dp[i] la so cach lay max nam neu bat dau tu dinh i
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
prep();
cin>>n>>m;
for(int i=1; i<=m; i+=1)
{
int x,y,w; cin>>x>>y>>w;
adj[x].push_back({y,w});
rev_adj[y].push_back({x,w});
}
cin>>start;
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBzaXooeCkgKGludCkoeC5zaXplKCkpCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIGRlYnVnX2Fycih4LGxlbikgZm9yKGludCBfPTE7IF88PWxlbjsgXysrKSBjb3V0PDx4W19dPDwiICI7IGNvdXQ8PCdcbic7CiNkZWZpbmUgZGVidWcoeCkgY291dDw8J1xuJzw8I3g8PCI6ICI8PHg8PCdcbic7CmNvbnN0IGludCBtYXhOID0gMWU2KzU7CgppbnQgbiwgbSwgc3RhcnQsIHZzdFttYXhOXSwgZlttYXhOXSwgc2NjX2lkW21heE5dLCB2YWxbbWF4Tl0sIGRlbSA9IDAsIGRwW21heE5dOwp2ZWN0b3I8cGFpcjxpbnQsaW50Pj5hZGpbbWF4Tl0sIHJldl9hZGpbbWF4Tl07CnNldDxwYWlyPGludCxpbnQ+PmNvbXByZXNzW21heE5dOwp2ZWN0b3I8aW50Pm9yZDsKCnZvaWQgcHJlcCgpCnsKICAgIGZvcihpbnQgaT0xOyBpPD0xZTY7IGkrPTEpCiAgICB7CiAgICAgICAgaW50IHhldCA9IGkqKGkrMSkgLyAyOwogICAgICAgIGZbaV09ZltpLTFdK3hldDsKICAgIH0KfQoKaW50IGNhbChpbnQgeCkKewogICAgaW50IHRtcCA9IHNxcnQoOCp4ICsgMSk7CiAgICBpbnQgcmVzID0gKHRtcCAtIDEpIC8gMjsKICAgIHJldHVybiByZXM7Cn0KLy8gbioobisxKSAvIDIgPSB4IC0+IG4qbiArIG4gPSAyeCAKLy8gLT4gNG4qbiArIDRuID0gOHggLT4gOHggKyAxID0gKDJuKzEpKigybisxKQovLyAtPnNxcnQoOHgrMSkgPSAoMm4rMSkKCnZvaWQgZGZzMShpbnQgdSkKewogICAgdnN0W3VdID0gMTsKICAgIGZvcihhdXRvIGk6IGFkalt1XSkKICAgIHsKICAgICAgICBpZighdnN0W2kuZmldKSBkZnMxKGkuZmkpOwogICAgfQogICAgb3JkLnB1c2hfYmFjayh1KTsKfQoKdm9pZCBkZnMyKGludCB1KQp7CiAgICB2c3RbdV0gPSAxOwogICAgc2NjX2lkW3VdID0gZGVtOwogICAgZm9yKGF1dG8gaTogcmV2X2Fkalt1XSkKICAgIHsKICAgICAgICBpZighdnN0W2kuZmldKSBkZnMyKGkuZmkpOwogICAgfQp9Cgp2b2lkIGRmczMoaW50IHUsIGludCB2KQp7CiAgICB2c3RbdV0gPSAxOwogICAgZm9yKGF1dG8gaTogY29tcHJlc3NbdV0pCiAgICB7CiAgICAgICAgaWYoaS5maSA9PSB2KSBjb250aW51ZTsKICAgICAgICBpZighdnN0W2kuZmldKSBkZnMzKGkuZmksIHUpOwogICAgICAgIGRwW3VdID0gbWF4KGRwW3VdLCB2YWxbdV0gKyBkcFtpLmZpXSArIGkuc2UpOwogICAgfQp9CnZvaWQgc29sdmUoKQp7CiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSs9MSkKICAgIHsKICAgICAgICBpZighdnN0W2ldKSBkZnMxKGkpOwogICAgfQogICAgcmV2ZXJzZShhbGwob3JkKSk7CiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSs9MSkgdnN0W2ldID0gMDsKICAgIGZvcihhdXRvIGk6IG9yZCkKICAgIHsKICAgICAgICBpZighdnN0W2ldKQogICAgICAgIHsKICAgICAgICAgICAgZGVtKys7IGRmczIoaSk7CiAgICAgICAgfQogICAgfQogICAgZm9yKGludCBpPTE7IGk8PW47IGkrPTEpCiAgICB7CiAgICAgICAgZm9yKGF1dG8gW2osIHddOiBhZGpbaV0pCiAgICAgICAgewogICAgICAgICAgICBpZihzY2NfaWRbal0gPT0gc2NjX2lkW2ldKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWxbc2NjX2lkW2ldXSArPSB3ICogKGNhbCh3KSArIDEpIC0gZltjYWwodyldOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgY29tcHJlc3Nbc2NjX2lkW2ldXS5pbnNlcnQoe3NjY19pZFtqXSwgd30pOwogICAgICAgIH0KICAgIH0KICAgIGZvcihpbnQgaT0xOyBpPD1kZW07IGkrPTEpIGRwW2ldID0gdmFsW2ldOwogICAgZm9yKGludCBpPTE7IGk8PW47IGkrPTEpIHZzdFtpXSA9IDA7CiAgICBmb3IoaW50IGk9MTsgaTw9ZGVtOyBpKz0xKSAKICAgIHsKICAgICAgICBpZighdnN0W2ldKSBkZnMzKGksIDApOwogICAgfQogICAgY291dDw8ZHBbc3RhcnRdPDwnXG4nOwp9CgovLyBkcFtpXSBsYSBzbyBjYWNoIGxheSBtYXggbmFtIG5ldSBiYXQgZGF1IHR1IGRpbmggaQppbnQzMl90IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwogICAgcHJlcCgpOwogICAgY2luPj5uPj5tOwogICAgZm9yKGludCBpPTE7IGk8PW07IGkrPTEpCiAgICB7CiAgICAgICAgaW50IHgseSx3OyBjaW4+Png+Pnk+Pnc7CiAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh7eSx3fSk7CiAgICAgICAgcmV2X2Fkalt5XS5wdXNoX2JhY2soe3gsd30pOwogICAgfQogICAgY2luPj5zdGFydDsKICAgIHNvbHZlKCk7Cn0=