#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s,t;
long long ans;
vector<vector<int> >e(202);
vector<vector<int> >dis(202,vector<int>(202));
vector<bool>vis(202);
vector<int>vis2(202),fa(202);
priority_queue<pair<int,pair<int,int> > >q;
bool bfs()
{
for(int i=1;i<=n;i++)
vis[i]=vis2[i]=fa[i]=0;
while(!q.empty())
q.pop();
for(int v:e[s])
if(dis[s][v]>0)
q.push(make_pair(dis[s][v],make_pair(s,v)));
while(!q.empty())
{
pair<int,pair<int,int> > nw=q.top();
q.pop();
if(vis[nw.second.second]==1)
continue;
vis[nw.second.second]=1;
vis2[nw.second.second]=nw.first;
fa[nw.second.second]=nw.second.first;
if(nw.second.second==t)
return 1;
for(int v:e[nw.second.second])
if(dis[nw.second.second][v]>0)
q.push(make_pair(min(dis[nw.second.second][v],vis2[nw.second.second]),make_pair(nw.second.second,v)));
}
return 0;
}
void slove()
{
int nw=t;
ans+=vis2[t];
while(nw!=s)
{
dis[fa[nw]][nw]-=vis2[t];
dis[nw][fa[nw]]+=vis2[t];
nw=fa[nw];
}
return;
}
main()
{
read(n,m,s,t);
for(int i=1,u,v,w;i<=m;i++)
{
read(u,v,w);
e[u].push_back(v);
e[v].push_back(u);
dis[u][v]+=w;
}
while(bfs())
slove();
write(ans);
return 0;
}