#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-4; vector > tab; ld R, A, B; ld crosspro (pair a, pair b) { return a.fi * b.fi + a.se*b.se; } int main () { int n; scanf ("%d %Lf %Lf %Lf", &n, &R, &A, &B); R+=eps; vector > pkt(n); for (auto &p: pkt) scanf ("%Lf %Lf", &p.fi, &p.se); pair AB = mp(A, B), dal = mp(A * 1e10, B * 1e10); for (auto p: pkt) { ld d2 = ld((A*p.se - B*p.fi) * (A*p.se - B*p.fi)) / ld(A*A+B*B); if (d2 + 1e-12 > ld(R*R) ) continue; ld h = sqrt( ld(R*R) - d2); pair c = AB, c1, c2; c.fi *= crosspro(p, AB) / crosspro(AB,AB); c.se *= crosspro(p, AB) / crosspro(AB, AB); pair moj = mp(dal.fi - c.fi, dal.se - c.se); ld dist = sqrt(crosspro(moj, moj)); tab.pb(mp(dist-h, 1)); tab.pb(mp(dist+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); }