#include using namespace std; typedef long long ll; typedef double lf; typedef pair pii; typedef pair pll; #define TRACE(x) cerr << #x << ' ' << x << endl #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define REP(i, n) FOR(i, 0, n) #define _ << ' ' << #define fi first #define sec second #define se second #define mp make_pair #define pb push_back const lf EPS = 1e-12; inline bool lt(const lf a, const lf b) { return b - a > EPS; } inline bool eq (const lf a, const lf b) { return !lt(a, b) && !lt(b, a); } inline bool gt(const lf a, const lf b) { return lt(b, a); } typedef double T; struct pt { T x, y; pt(){} pt (T a, T b) { x = a; y = b; } pt operator + (pt p) { return {x+p.x, y+p.y};} pt operator - (pt p) { return {x-p.x, y-p.y};} pt operator * (T d) { return {x*d, y*d};} pt operator / (T d) { return {x/d, y/d};} }; T sq(pt p) { return p.x * p.x + p.y * p.y;} lf abs(pt p) { return sqrt(sq(p));} pt perp(pt p) {return {-p.y, p.x};} T cross(pt v, pt w) { return v.x*w.y - v.y * w.x;} struct line { pt v; T c; line (pt p, pt q) : v(q-p), c(cross(v,p)) {} T side(pt p) {return cross(v,p)-c;} pt proj(pt p) {return p-perp(v)*side(p)/sq(v);} }; int n; T A, B; bool cmp(pair a, pair b) { if (eq(a.fi, b.fi)) return a.sec < b.sec; return lt(a.fi, b.fi); } T R; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); scanf("%d %lf %lf %lf",&n,&R,&A,&B); line L = line(pt(0, 0), pt(A, B)); vector > v; pt P = pt(1e8 * A, 1e8 * B); REP(i, n) { lf x, y; scanf("%lf %lf",&x,&y); pt t = pt(x, y); pt Y = L.proj(t); T d = abs(t - Y); if (gt(d, R)) continue; lf tt = sqrt(R*R - d*d); lf lo = abs(Y - P) - tt; lf hi = abs(Y - P) + tt; v.pb({lo, -1}); v.pb({hi, 1}); } sort(v.begin(), v.end(), cmp); int tmp = 0; int sol = 0; REP(i, (int)v.size()) { tmp -= v[i].sec; sol = max(sol, tmp); } printf("%d\n",sol); return 0; }