#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-8; 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+=1e-5; vector > pkt(n); for (auto &p: pkt) scanf ("%Lf %Lf", &p.fi, &p.se); pair AB = mp(A, B); 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); ld dist = crosspro(p, AB); //to jest moj rzut 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); }