#include<bits/stdc++.h>
#define inf 0x7f7f7f7f7f7f7f7f
#define ll long long
#define mx 5010
using namespace std;
struct edge{
ll flow,cost,to,next;
}e[100010];
ll head[mx],flow[mx],dis[mx],pre[mx],vis[mx],mn=inf,maxf,minc,n,m,a,b,x,y,z,zz,xb=1;
queue<ll> q;
void adde(ll f,ll t,ll v,ll w){
e[++xb].to=t;
e[xb].flow=v;
e[xb].cost=w;
e[xb].next=head[f];
head[f]=xb;
}
bool spfa(){
while(!q.empty()) q.pop();
memset(pre,-1,sizeof(pre));
memset(vis,0,sizeof(vis));
memset(dis,inf,sizeof(dis));
q.push(a);
flow[a]=inf;
dis[a]=0;
vis[a]=1;
while(1){
if(q.empty()==1)
break;
ll x=q.front();
q.pop();
vis[x]=0;
for(ll i=head[x];i;i=e[i].next){
if(e[i].flow>0&&dis[e[i].to]>dis[x]+e[i].cost){
int t=e[i].to;
flow[t]=min(flow[x],e[i].flow);
dis[t]=dis[x]+e[i].cost;
pre[t]=i;
if(!vis[t]){
q.push(t);
vis[t]=1;
}
}
}
}
if(pre[b]!=-1)
return 1;else
return 0;
}
void mcmf(){
while(spfa()){
maxf+=flow[b];
minc+=dis[b]*flow[b];
ll i=b;
while(i!=0){
e[pre[i]].flow-=flow[b];
e[pre[i]^1].flow+=flow[b];
i=e[pre[i]^1].to;
}
}
}
int main(){
cin>>n>>m;
a=1,b=n;
for(ll i=1;i<=m;++i){
cin>>x>>y>>z>>zz;
adde(x,y,z,zz);
adde(y,x,0,-zz);
}
mcmf();
cout<<maxf<<' '<<minc;
return 0;
}