#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define inf 214748364700000000
#define N 1919810
#define p 6767
#define int long long
using namespace std;
int head[N],to[N],nxt[N],val[N],n,m,d[N],s,t,tot=1;
void add(int u,int v,int w){
to[++tot]=v;
nxt[tot]=head[u];
head[u]=tot;
val[tot]=w;
}
bool bfs(){
memset(d,-1,sizeof(d));
queue<int>q;
q.push(s);
d[s]=0;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=head[x];i;i=nxt[i]){
if(!val[i])continue;
int y=to[i];
if(d[y]==-1){
d[y]=d[x]+1;
if(y==t)return 1;
q.push(y);
}
}
}
return 0;
}
int dfs(int x,int a){
if(!a||x==t)return a;
int res=a;
for(int i=head[x];i;i=nxt[i]){
int y=to[i];
if(val[i]&&d[x]+1==d[y]){
int tmp=dfs(y,min(val[i],res));
res-=tmp;
val[i]-=tmp;
val[i^1]+=tmp;
if(res==0)return a;
}
}
if(res==a)d[x]=-1;
return a-res;
}
int dinic(){
int flow=0;
while(bfs())flow+=dfs(s,inf);
return flow;
}
signed main(){
scanf("%lld%lld",&n,&m);
s=1,t=n;
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
add(a,b,c*p+1);
add(b,a,0);
}
int ans=dinic();
printf("%lld %lld",ans/p,ans%p);
return 0;
}
(验证码tntt祭)