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;
namespace {
static const int mo = 1e9 + 7;
void add(int &x, int y) {
  if ((x += y) >= mo) x -= mo;
}
void sub(int &x, int y) {
  if ((x -= y) < 0) x += mo;
}
int mul(int x, int y) { return 1ll * x * y % mo; }
int pw(int b, int p, int mo) {
  if (p < 2) return p ? b : 1;
  long long t = pw(b, p >> 1, mo);
  t = t * t % mo;
  return p & 1 ? t * b % mo : t;
}
void upd(int &x, int y) { add(x, y); }
}  // namespace
const int N = 100005;
int n, V, top, st[N], f[N], ans, res;
long long va[N];
pair<long long, long long> w[N];
struct eve {
  int x, t;
} a[N];
bool cmp0(pair<long long, long long> u, pair<long long, long long> v) {
  return u.first == v.first ? u.second > v.second : u.first > v.first;
}
bool cmp(long long x, long long y) { return x > y; }
void do_another() {
  ++n, a[n].x = 0, a[n].t = 0;
  for (int i = 1; i <= n; ++i) {
    w[i] = make_pair(1ll * V * a[i].t - a[i].x, 1ll * V * a[i].t + a[i].x);
  }
  sort(w + 1, w + 1 + n, cmp0);
  w[0].second = 1e18, st[top = 0] = 0, va[top] = 1e18;
  for (int i = 1; i <= n; ++i) {
    if (w[st[top]].second >= w[i].second) {
      st[++top] = i, va[top] = w[i].second, f[i] = top;
      continue;
    }
    int pos = upper_bound(va, va + top + 1, w[i].second, cmp) - va - 1;
    st[pos + 1] = i, va[pos + 1] = w[i].second, f[i] = f[pos] + 1;
  }
  res = f[n];
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    scanf("%d%d", &a[i].x, &a[i].t);
  }
  cin >> V;
  for (int i = 1; i <= n; ++i)
    w[i] = make_pair(1ll * V * a[i].t - a[i].x, 1ll * V * a[i].t + a[i].x);
  sort(w + 1, w + 1 + n);
  w[0].second = -1e18, st[top = 0] = 0, va[top] = -1e18;
  for (int i = 1; i <= n; ++i) {
    if (w[st[top]].second <= w[i].second) {
      st[++top] = i, va[top] = w[i].second;
      continue;
    }
    int pos = upper_bound(va, va + top + 1, w[i].second) - va - 1;
    st[pos + 1] = i, va[pos + 1] = w[i].second;
  }
  ans = top;
  do_another();
  cout << top - 1 << " " << ans << endl;
  return 0;
}
