#include using namespace std; vector> event; int main() { long long n, r, a, b; scanf("%lld%lld%lld%lld", &n, &r, &a, &b); __int128_t a2b2 = a * a + b * b; __int128_t r2a2b2 = r * r * a2b2 * a2b2; // long double max_len = 1.0 * sqrt(1.0 * a * a + 1.0 * b * b); long double max_len = sqrt((long double)(a2b2 * a2b2 * a2b2)); for(int i = 0; i < n; i++){ long long x, y; scanf("%lld%lld", &x, &y); //long double lambda = (1.0 * x * a + 1.0 * y * b) / (1.0 * a * a + 1.0 * b * b); //long double tx = a * lambda; //long double ty = b * lambda; __int128_t lambda = (x * a + y * b); __int128_t tx = a * lambda; __int128_t ty = b * lambda; //long double len = sqrt(1.0 * (tx - x) * (tx - x) + 1.0 * (ty - y) * (ty - y)); //long double len_line = 1.0 * sqrt(1.0 * r * r - 1.0 * len * len); __int128_t len = (tx - x * a2b2) * (tx - x * a2b2) + (ty - y * a2b2) * (ty - y * a2b2); if (len > r2a2b2) continue; long double len_line = sqrt((long double)(r2a2b2 - len)); //long double len_origin = sqrt(1.0 * tx * tx + 1.0 * ty * ty); long double len_origin = sqrt((long double)(tx * tx + ty * ty)); event.push_back(make_pair(max((long double) 0.0, len_origin - len_line - 0.00005), 1)); event.push_back(make_pair(min(max_len, len_origin + len_line + 0.00005), -1)); } sort(event.begin(), event.end()); int num = 0, ans = 0; for(int i = 0; i < (int)event.size(); i++){ if(event[i].second == 1){ num++; } else{ num--; } ans = max(ans, num); } printf("%d\n", ans); return 0; }