1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int N = 5e3 + 10;
5 ll n, m, s, t, ans1, ans2, ee = 2;
6 ll flg[N][N], vis[N], h[N],dis[N];
7 struct edge{
8 ll v, next, flow, w;
9 }e[100100];
10
11 void addedge(ll u, ll v, ll flow, ll w)
12 {
13 e[ee] = (edge){v, h[u], flow, w};
14 h[u] = ee++;
15 }
16
17 struct Pre{
18 ll v, e_id;
19 }pre[N];
20
21 ll bfs()
22 {
23 memset(vis, 0, sizeof(vis));
24 memset(dis, 0x3f, sizeof(dis));
25 vis[s] = dis[s] = 0;
26 queue<int>q;
27 q.push(s);
28 while(q.size())
29 {
30 ll u = q.front();
31 vis[u] = 0;
32 q.pop();
33 for(ll i = h[u]; i; i = e[i].next)
34 {
35 ll v = e[i].v, w = e[i].w;
36 if(e[i].flow > 0 && dis[u] + w < dis[v])
37 {
38 pre[v].v = u;
39 pre[v].e_id = i;
40 dis[v] = dis[u] + w;
41 if(!vis[v])
42 {
43 q.push(v);
44 vis[v] = 1;
45 }
46 }
47 }
48 }
49 return dis[t] != 0x3f3f3f3f3f3f3f3f;
50 }
51 void EK()
52 {
53 while(bfs())
54 {
55 ll mi = LONG_MAX;
56 for(int i = t; i != s; i = pre[i].v)mi = min(mi, e[pre[i].e_id].flow);
57 for(int i = t; i != s; i = pre[i].v)
58 {
59 e[pre[i].e_id].flow -= mi;
60 e[pre[i].e_id ^ 1].flow += mi;
61 }
62 ans1 += mi;
63 ans2 += mi * dis[t];
64 }
65
66 }
67 int main()
68 {
69 ios::sync_with_stdio(false); cin.tie(0);
70 //freopen("P3381_8.in","r",stdin);
71 cin >> n >> m >> s >> t;
72 ll u, v, flow, w;
73 for(int i = 1; i <= m; i++)
74 {
75 cin >> u >> v >> flow >> w;
76 addedge(u, v, flow, w);
77 addedge(v, u, 0, -w);
78 }
79 EK();
80 cout << ans1 << " " << ans2 <<"\n";
81 return 0;
82 }