from dataclasses import dataclass
from fractions import Fraction

@dataclass
class ratSq:
    a : Fraction
    b : Fraction
    s : Fraction
    def to_float(self):
        return self.a + self.b * (self.s)**(1/2)


 
def fromPt(p, q, A, B, r):
    #print()
    #print(p, q, A, B, r)
    ba = Fraction(B, A)
    qa = ba * ba + 1
    qb = -(2 * p + 2 * ba * q)
    qc = p*p + q * q - r*r

    discr = qb * qb - 4 * qa * qc

    if discr < 0:
        return None
    elif discr == 0:
        a = -qb / (2 * qa)
        x0 = ratSq(a, 0, 0)
        return x0.to_float() - 0.000001, x0.to_float() + 0.000001
    else:
        a = -qb / (2 * qa)
        b = 1 / (2 * qa)
        s = discr
        #print(p, q, A, B, r, a, b, s)
        #print(qa, qb, qc, discr)
        return ratSq(a, -b, s).to_float()- 0.000001, ratSq(a, b, s).to_float() + 0.000001
 


n, r, a, b = list(map(int, input().split(' ')))
pts = []
#print(n, r, a, b)

edges = []

swapCoords = False

if a == 0:
    swapCoords = True
    a = b
    b = 0

for i in range(n):
    x, y = list(map(int, input().split(' ')))
    if swapCoords:
        x, y = y, x
    pts.append((x, y))
    res = fromPt(x, y, a, b, r)
    #print(res)
    if res is not None:
        ll, rr = res
        edges.append((ll, True))
        edges.append((rr, False))

maxcnt = 0 
curcnt = 0

edges.sort()

for _, start in edges:
    if start:
        curcnt += 1
        maxcnt = max(curcnt, maxcnt)
    else:
        curcnt -= 1

print(maxcnt)

