#include<bits/stdc++.h>
#define inf 1e9
using namespace std;
struct Node{
int to,w,v;
};
vector<Node>a[205];
int n,m,s,t,ans,dis[205],now[205],qwq[205];
bool vis;
queue<int>q;
inline void bfs(int p){
// cout<<p<<' '<<dis[p]<<'\n';
if(p==t){
vis=1;
return;
}
for(int i=0;i<qwq[p];i++){
// cout<<"qwq"<<'\n';
if(dis[a[p][i].to]==inf&&a[p][i].w>0){
// cout<<a[p][i].w<<' '<<p<<' '<<a[p][i].to<<'\n';
dis[a[p][i].to]=dis[p]+1;
q.push(a[p][i].to);
}
}
}
inline bool Bfs(){
vis=0;
q.push(s);
for(int i=1;i<=n;i++){
now[i]=0;
dis[i]=inf;
}
dis[s]=0;
while(q.size()){
bfs(q.front());
q.pop();
}
return vis;
}
int dfs(int p,int val){
// cout<<p<<' '<<val<<'\n';
if(p==t){
return val;
}
int sum=val;
for(int i=now[p];sum&&i<qwq[p];i++){
if(dis[a[p][i].to]!=dis[p]+1){
continue;
}
now[p]=i;
int k=dfs(a[p][i].to,min(sum,a[p][i].w));
if(k==0){
dis[a[p][i].to]=inf;
continue;
}
sum-=k;
a[p][i].w-=k;
a[a[p][i].to][a[p][i].v].w+=k;
}
return val-sum;
}
inline int Dfs(){
return dfs(s,inf);
}
inline void Dinic(){
while(Bfs()){
// cout<<ans<<endl;
int w=Dfs();
if(!w){
return;
}
ans+=w;
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
a[u].push_back({v,w,qwq[v]});
a[v].push_back({u,0,qwq[u]});
qwq[u]++;
qwq[v]++;
}
Dinic();
cout<<ans;
return 0;
}
/*
4 7 1 4
1 2 5
2 3 5
3 2 5
1 3 5
1 4 10
2 4 10
3 4 10
*/
玄关qwq