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 <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-11;
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
void setbit(T& v, int position) {
  v |= (T)1 << position;
}
template <class T>
void unsetbit(T& v, int position) {
  v &= ~((T)1 << position);
}
template <class T>
void togglebit(T& v, int position) {
  v ^= (T)1 << position;
}
template <class T>
bool isbit(T v, int position) {
  return (v & ((T)1 << position)) != 0;
}
template <class T>
inline int countbit(T n) {
  return (n == 0) ? 0 : (1 + countbit(n & (n - 1)));
}
string ReadToEndLine(istream& s) {
  string sLine;
  getline(s, sLine);
  return sLine;
}
char gStr[1024];
struct Runner {
  Runner(istream& in, ostream& out) : mIn(in), mOut(out) {}
  void Run();
  istream& mIn;
  ostream& mOut;
};
int Lis_NlogN(const vector<pair<long long, long long>>& V) {
  vector<int> D(V.size() + 1);
  vector<int> P(V.size());
  D[0] = -1;
  int L = 0;
  for (int i = (0); i < ((int)(V.size())); i++) {
    int lo = 1, hi = L;
    while (lo <= hi) {
      int mid = (lo + hi) / 2;
      if (V[D[mid]].second <= V[i].second)
        lo = mid + 1;
      else
        hi = mid - 1;
    }
    P[i] = D[lo - 1];
    if (lo > L) {
      D[lo] = i;
      L = lo;
    } else if (V[i].second < V[D[lo]].second) {
      D[lo] = i;
    }
  }
  return L;
}
void Runner::Run() {
  int N;
  long long V;
  mIn >> N;
  vector<pair<int, int>> E(N);
  for (int i = (0); i < ((int)(E.size())); i++) {
    int x, t;
    mIn >> x >> t;
    E[i] = make_pair(x, t);
  }
  mIn >> V;
  vector<pair<long long, long long>> Sa, S0;
  for (int i = (0); i < ((int)(E.size())); i++) {
    long long p = V * E[i].second - E[i].first;
    long long q = V * E[i].second + E[i].first;
    Sa.push_back(make_pair(p, q));
    if (V * E[i].second >= (long long)abs(E[i].first))
      S0.push_back(make_pair(p, q));
  }
  sort(Sa.begin(), Sa.end());
  sort(S0.begin(), S0.end());
  int resa = Lis_NlogN(Sa);
  int res0 = Lis_NlogN(S0);
  mOut << res0 << " " << resa << endl;
}
int main() {
  Runner runner(cin, cout);
  runner.Run();
  return 0;
}
