#include #define st first #define nd second #define pb push_back using namespace std; typedef long double ld; typedef long long ll; const ld eps = 0.000001; bool cmp(const ld a, const ld b = 0) { return abs(a-b) < eps; } struct pnt { ld x, y; pnt (ld _x = 0, ld _y = 0) : x(_x), y(_y) {} pnt operator + (const pnt &p) { return pnt(x + p.x, y + p.y); } pnt operator - (const pnt &p) { return pnt(x - p.x, y - p.y); } ld operator * (const pnt &p) { return x * p.y - y * p.x; } ld operator ^ (const pnt &p) { return x * p.x + y * p.y; } ld mod2() { return x*x + y*y; } ld mod() { return sqrt(mod2()); } pnt operator * (const ld &d) { return pnt(x * d, y * d); } }; const int N = 3e5 + 10; int n; ld R, A, B; vector boats; vector> seg; ld odleglosc2(const pnt &p) { return (p.x * B - p.y * A) * (p.x * B - p.y * A) / (A*A + B*B); } pair segm(pnt p) { ld d2 = odleglosc2(p); if (d2 > R*R) return {pnt(-1e9, -1e9), pnt(0,0)}; pnt norm(B, -A); ld mod = norm.mod(); norm.x /= mod; norm.y /= mod; norm = norm * sqrt(d2); pnt p1 = p + norm; if (!cmp(p1.x * B - p1.y * A)) { p1 = p - norm; } // cout << p1.x << " " << p1.y << "\n"; norm = pnt(A, B); mod = norm.mod(); norm.x /= mod; norm.y /= mod; norm = norm * sqrt(R*R - d2); return {p1 + norm, p1 - norm}; } vector> ev; int main() { ios_base::sync_with_stdio(false); cin >> n >> R >> A >> B; boats.resize(n); for (int i = 0; i < n; ++i) { ld a, b; cin >> a >> b; auto cur = (segm(pnt(a,b))); // cout << cur.st.x << " " << cur.st.y << ", " << cur.nd.x << " " << cur.nd.y << "\n"; if (cmp(cur.st.x, -1e9)) continue; if (A == 0) { if (cur.st.y > cur.nd.y) { swap(cur.st, cur.nd); } ev.push_back({cur.st.y, 0}); ev.push_back({cur.nd.y, 1}); } else { if (cur.st.x > cur.nd.x) { swap(cur.st, cur.nd); } ev.push_back({cur.st.x, 0}); ev.push_back({cur.nd.x, 1}); } } sort(ev.begin(), ev.end()); int ans = 0, cur = 0; for (auto e : ev) { // cout << e.st << " " << e.nd << "\n"; if (e.nd == 1) { cur--; } else { cur++; } ans = max(ans, cur); } cout << ans << "\n"; }