#include #define rep(i,a,b) for (int i=a; i PII; typedef vector VI; typedef long long ll; typedef long double ld; const ld eps = 1e-5; vector > tab; ll R, A, B; ll dotpro (pair a, pair b) { return a.fi * b.fi + a.se*b.se; } int main () { int n; scanf ("%d %lld %lld %lld", &n, &R, &A, &B); vector > pkt(n); for (auto &p: pkt) scanf ("%lld %lld", &p.fi, &p.se); pair AB = mp(A, B); for (auto p: pkt) { ll d2 = (A*p.se - B*p.fi) * (A*p.se - B*p.fi); if (d2 > R*R*(A*A+B*B)) continue; //za daleko ld rzut = ld(dotpro(p, AB))/ld(A*A+B*B); ld h = sqrt( ld(R*R) - ld(d2)/ld(A*A+B*B) + eps); tab.pb(mp(rzut - h, 1)); tab.pb(mp(rzut + h, -1)); } sort(tab.begin(), tab.end()); int stan = 0, res = 0; for (auto p: tab) { stan+=p.se; res = max(res, stan); } printf ("%d\n", res); }