#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<pair<int,int> >x[1000005],y[1000005],z[1000005];
int q[1000005],head=1,tail=0;
int l[1000005],num[1000005],points[1000005],dis[1000005],cnt=0,add;
char *p1,*p2,buf[1<<20];
inline char gc(){
if(p1==p2)
p2=(p1=buf)+fread(buf,1,1<<20,stdin);
return (p1==p2)?EOF:*p1++;
}
inline int read(){
register int x=0,w=1;
register char ch=gc();
while(ch<'0'||ch>'9'){
if(ch=='-')
w=-1;
ch=gc();
}
while(ch>='0'&&ch<='9') {
x=(x<<3)+(x<<1)+(ch^48);
ch=gc();
}
return x*w;
}
signed main(){
int n=read(),m=read(),s=read(),t=read();
for(register int i=1;i<=m;i++){
int a=read(),b=read(),c=read();
x[a].emplace_back(b,c);
z[b].emplace_back(a,c);
l[b]++;
}
for(register int i=1;i<=n;i++)if(!l[i])q[++tail]=i;
for(register int i=1;i<=n;i++){
int now=q[head];
num[now]=++cnt;
points[cnt]=now;
head++;
for(register int i=0;i<x[now].size();++i){
l[x[now][i].first]--;
if(!l[x[now][i].first])q[++tail]=x[now][i].first;
}
}
for(register int i=num[t];i>num[s];i--)for(register int j=0;j<z[points[i]].size();j++)y[num[z[points[i]][j].first]].emplace_back(i,z[points[i]][j].second);
dis[num[s]]=1e18;
for(register int i=num[s];i<num[t];i++){
for(register int j=0;dis[i]&&j<y[i].size();j++){
if(y[i][j].first<=num[t]){
dis[y[i][j].first]+=min(dis[i],y[i][j].second);
dis[i]-=min(dis[i],y[i][j].second);
}
}
}
printf("%lld",dis[num[t]]);
return 0;
}