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

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;


public class Tourist {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long[] x = new long[n + 1];
        long[] t = new long[n + 1];
        for(int i = 1; i < n + 1; ++i) {
            x[i] = sc.nextLong();
            t[i] = sc.nextLong();
        }
        int v = sc.nextInt();
//      int n = 7, v = 352;
//      long[] x = {0, -976754, 79929143, 9598220, -51609349, 67416551, -14170975, -15476178};
//      long[] t = {0, 20479, 911181, 82517, 810257, 266544, 307690, 491195};
        
        System.out.println(fromZeroPoint(v, x, t) + " " +
                fromAnyPoint(v, x, t));
    }
    
    private static int fromZeroPoint(int v, long[] x, long[] t) {
        int n = x.length;
        int[] maxP = new int[n];
        maxP[0] = 1;
        Integer[] indexes = indexes(t);
        for(int i = 0; i < n; ++i) {
            int max = 0;
            for(int j = 0; j < i; ++j) {
                long xDiff = Math.abs(x[indexes[i]] - x[indexes[j]]);
                long tDiff = t[indexes[i]] - t[indexes[j]];
                if(xDiff <= (tDiff * v) && maxP[j] > max) {
                    max = maxP[j];
                }
            }
            maxP[i] = max + 1;
        }
        int max = 0;
        for(int i = 0; i < n; ++i) {
            if(maxP[i] > max) max = maxP[i];
        }
        return max - 1;
    }

    private static int fromAnyPoint(int v, long[] x, long[] t) {
        int n = x.length;
        Integer[] indexes = indexes(t);
        int[] maxP = new int[n];
        for(int i = 1; i < n; ++i) {
            int max = 0;
            for(int j = 1; j < i; ++j) {
                long xDiff = Math.abs(x[indexes[i]] - x[indexes[j]]);
                long tDiff = t[indexes[i]] - t[indexes[j]];
                if(xDiff <= (tDiff * v) && maxP[j] > max) {
                    max = maxP[j];
                }
            }
            maxP[i] = max + 1;
        }
        int max = 0;
        for(int i = 0; i < n; ++i) {
            if(maxP[i] > max) max = maxP[i];
        }
        return max;
    }
    
    private static Integer[] indexes(final long[] t) {
        int n = t.length;
        Integer[] indexes = new Integer[n];
        for(int i = 0; i < n; ++i) {
            indexes[i] = i;
        }
        Arrays.sort(indexes, new Comparator<Integer>() {
            @Override
            public int compare(Integer l, Integer r) {
                return (int) (t[l] - t[r]);
            }
        });
        return indexes;
    }
}
