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 int maxn = 100005;
int ma[maxn << 2];
int query(int ll, int rr, int l, int r, int rt) {
  if (ll <= l && r <= rr) return ma[rt];
  int m = (l + r) >> 1, res = -1;
  if (ll <= m) res = max(res, query(ll, rr, l, m, rt << 1));
  if (rr > m) res = max(res, query(ll, rr, m + 1, r, rt << 1 | 1));
  return res;
}
void modify(int p, int v, int l, int r, int rt) {
  if (l == r) {
    ma[rt] = max(ma[rt], v);
    return;
  }
  int m = (l + r) >> 1;
  if (p <= m)
    modify(p, v, l, m, rt << 1);
  else
    modify(p, v, m + 1, r, rt << 1 | 1);
  ma[rt] = max(ma[rt << 1], ma[rt << 1 | 1]);
}
int n;
struct event {
  long long v1, v2;
  bool operator<(const event& a) const { return v2 < a.v2; }
} ji[maxn];
map<long long, int> mp;
map<long long, int>::iterator it;
int main() {
  int n, v;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &ji[i].v1, &ji[i].v2);
  }
  scanf("%d", &v);
  long long a, b;
  for (int i = 1; i <= n; i++) {
    a = ji[i].v1 + ji[i].v2 * v, b = -ji[i].v1 + ji[i].v2 * v;
    mp[a];
    ji[i].v1 = a;
    ji[i].v2 = b;
  }
  mp[0];
  sort(ji + 1, ji + n + 1);
  int tot = 0, ans1 = 0, ans2 = 0;
  for (it = mp.begin(); it != mp.end(); it++) it->second = ++tot;
  for (int i = 1; i <= n; i++) ji[i].v1 = mp[ji[i].v1];
  memset(ma, -1, sizeof(ma));
  int pt = n + 1;
  for (int i = 1; i <= n; i++) {
    if (ji[i].v2 >= 0) {
      pt = i;
      break;
    }
  }
  modify(mp[0], 0, 1, tot, 1);
  for (int i = pt; i <= n; i++) {
    int tp = query(1, ji[i].v1, 1, tot, 1);
    if (tp != -1) {
      ans1 = max(ans1, tp + 1);
      modify(ji[i].v1, tp + 1, 1, tot, 1);
    }
  }
  memset(ma, 0, sizeof(ma));
  for (int i = 1; i <= n; i++) {
    int tp = query(1, ji[i].v1, 1, tot, 1);
    ans2 = max(ans2, tp + 1);
    modify(ji[i].v1, tp + 1, 1, tot, 1);
  }
  printf("%d %d\n", ans1, ans2);
}
