#include<bits/stdc++.h>
using namespace std;
const int MM=100005;
int u,v,w,c,tmp,n,m,s,t,tot=1,flow,cost,nxt[MM],to[MM],fl[MM],cs[MM],dis[MM],head[MM],vis[MM],pre[MM],in[MM];
void add(int u,int v,int w,int c)
{
nxt[++tot]=head[u];
to[tot]=v;
fl[tot]=w;
cs[tot]=c;
head[u]=tot;
}
bool spfa()
{
queue<int> q;
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
q.push(s);
dis[s]=0;
in[s]=1<<30;
while(!q.empty())
{
int now=q.front();
vis[now]=0;
q.pop();
for(int i=head[now];i;i=nxt[i])
{
if(!fl[i])continue;
if(dis[now]+cs[i]<dis[to[i]])
{
dis[to[i]]=dis[now]+cs[i];
in[to[i]]=min(in[now],fl[i]);
pre[to[i]]=i;
if(!vis[to[i]])
{
vis[to[i]]=1;
q.push(to[i]);
}
}
}
}
if(dis[t]==1061109567)
return 0;
return 1;
}
void cf()
{
while(spfa())
{
flow+=in[t];
cost+=dis[t]*in[t];
tmp=t;
while(tmp!=s)
{
fl[pre[tmp]]-=in[t];
fl[pre[tmp]^1]+=in[t];
tmp=to[pre[tmp]^1];
}
}
}
int main()
{
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++)
{
cin>>u>>v>>w>>c;
add(u,v,w,c);
add(v,u,0,-c);
}
cf();
cout<<flow<<' '<<cost;
return 0;
}