#include<bits/stdc++.h>
using namespace std;
int n;
struct pp
{
    int x,y;
    double tt;
} p[110000];
vector<pp> k1;
vector<pp> k2;
int x,y;
int num1=0;
int num2=0;
int num3=0;
bool cmp(pp a,pp b)
{
    return a.tt<b.tt;
}
int k1a,k1b,k2a,k2b;
int ans1,ans2;
void ff(double x)
{
    if(x<0) return;
    int l=0;
    int r=k1.size();
    while(l<r)
    {
        int mid=(l+r)/2+1;
        if(x>k1[mid].tt) l=mid;
        else r=mid-1;
    }
    k1a=l;
    l=0;
    r=k1.size();
    while(l<r)
    {
        int mid=(l+r)/2+1;
        if(x-k1[mid].tt>(-1e-9)) l=mid;
        else r=mid-1;
    }
    k1b=l;
    l=0;
    r=k2.size();
    while(l<r)
    {
        int mid=(l+r)/2;
        if(x<k2[mid].tt) r=mid;
        else l=mid+1;
    }
    k2a=l;
    l=0;
    r=k2.size();
    while(l<r)
    {
        int mid=(l+r)/2;
        if(k2[mid].tt-x>(-1e-9)) r=mid;
        else l=mid+1;
    }
    k2b=l;
    ans1=min(ans1,num2+k1a+k2a);
    ans2=max(ans2,num1+n-k1b-k2b);
}
int main()
{
    scanf("%d",&n);
    scanf("%d%d",&x,&y);
    if(n==1)
    {
        printf("1 1\n");
        return 0;
    }
    n--;
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&p[i].x,&p[i].y);
        if(x-p[i].x>0.0)
        {
            p[i].tt=(y-p[i].y)*(p[i].x-x);
            k1.push_back(p[i]);
        }
        else if(p[i].x-x<0.0)
        {
            p[i].tt=(y-p[i].y)*(p[i].x-x);
            k2.push_back(p[i]);
        }
        else
        {
            if(p[i].y>y) num1++;
            else if(p[i].y<y) num2++;
            else num3++;
        }
    }
    sort(k1.begin(),k1.end(),cmp);
    sort(k2.begin(),k2.end(),cmp);
    ans1=n+1;
    ans2=1;
    for(int i=0;i<k1.size();i++)
    {
        ff(k1[i].tt-0.00001);
        ff(k1[i].tt);
        ff(k1[i].tt+0.00001);
    }
    for(int i=0;i<k2.size();i++)
    {
        ff(k2[i].tt-0.00001);
        ff(k2[i].tt);
        ff(k2[i].tt+0.00001);
    }
    ff(0);
    ff(0.00001);
    ff(1e9);
    ans1=n+1-ans1;
    ans2=n+1-ans2;
    printf("%d %d\n",ans2,ans1);
    return 0;
}
