#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
double x[N],y[N];
int p[N];
struct node{
int x,y,v;
};
bool cmp(node a,node b)
{
if(a.x!=b.x)
return a.x<b.x;
return a.y<b.y;
}
map<double,vector<node> >mp;
int main()
{
int n;
cin>>n;
int num=0;
int sum=0;
for(int i=0;i<n;i++)
{
int x,y,p;
cin>>x>>y>>p;
sum+=p;
mp[y*1.0/x].push_back({x,y,p});// 在斜率相同的条件下,存进该vector容器里。
}
for(int auto x:mp)
{
vector<node> ve=x.second;//将mp中第二个位置,也就是vector里的数据 拿到ve这个新建的容器中
sort(ve.begin(),ve.end(),cmp);//将该容器里面的数进行从小到大排序
for(int i=0;i<ve.size();i++)
{
if(i==0||ve[i].v!=1||ve[i-1].v!=1)
num++;
}
}
cout<<sum<<" "<<num<<endl;
return 0;
}
//关于map vector 的stl 第一次知道这种用法,长知识了