12
-6712 6
2375 73
4643 197
-5660 215
-378 223
2228 307
3305 340
3449 468
-4389 707
-7161 729
-1838 921
-1655 985
730
 5
1 5
6 7
17127 17
17072 42
17042 77
3
 7
-976754 20479
79929143 911181
9598220 82517
-51609349 810257
67416551 266544
-14170975 307690
-15476178 491195
352
 22
-5301 602
-1400 194
-8512 987
-282 962
6484 494
9091 523
-7744 92
6002 461
5053 305
-1339 272
-821 165
9308 785
929 421
8384 883
1266 157
8411 923
-2949 885
7725 687
6859 197
-7630 867
5031 918
5662 410
41

11 12
 2 3
 5 5
 9 9

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>

using namespace std;

const long long MAX_N=1000*100+100;

 pair<long long,int>   a[MAX_N];

#define p first

#define q second

const long long maxi=100000000000ll;

long long dp[MAX_N];



long long x[MAX_N];

long long t[MAX_N];

long long q[MAX_N];

int main(){
    long long n,v;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>x[i]>>t[i];

    cin>>v;

    for(int i=0;i<n;i++){
        a[i].first=x[i]+v*t[i];
        q[i]=-x[i]+v*t[i];
        a[i].q=i;
    }
    sort(a,a+n);

    fill(dp,dp+n,maxi);
    int ans=-1;
    for(int i=0;i<n;i++){
        int o=upper_bound(dp,dp+n,q[a[i].second])-dp;
        if(o<=n){
            dp[o]=q[a[i].second];
            ans=max(ans,o);
        }
    }
    ans+=1;
 //   cout<<ans<<endl;
    int ja=0;
    pair<int,int> f[MAX_N];
    long long h[MAX_N];
    for(int i=0;i<n;i++)
        if(a[i].first>=0&&q[a[i].second]>=0){
            f[ja].first=a[i].p;
            h[ja]=q[a[i].second];
            f[ja].second=ja;
            ja+=1;
        }
 //   cerr<<n<<endl;
    n=ja;
    sort(f,f+n);
    fill(dp,dp+n,maxi);
    int    ans2=-1;
    for(int i=0;i<n;i++){
        int o=upper_bound(dp,dp+n,h[f[i].second])-dp;
        if(o<n){
            dp[o]=h[f[i].second];
            ans2=max(ans2,o);
        }
    }
    ans2+=1;
    cout<<ans2<<' '<<ans<<endl;
    return 0;

}
