#include #include using namespace std; struct p { long long x, y; p( long long a = 0, long long b = 0 ) : x(a), y(b) {} }; vector

data; long long N, R; inline long long odl( p A, int id ) { return (A.x - data[id].x) * (A.x - data[id].x) + (A.y - data[id].y) * (A.y - data[id].y); } int fun() { scanf("%lld %lld", &N, &R); if ( N == 0 and R == 0 ) return 1; R *= 2; data.clear(); for ( int i = 0; i < N; i++ ) { long long x, y; scanf("%lld %lld", &x, &y); data.push_back( p(x, y) ); } int res = 0; for ( int i = 0; i < N; i++ ) { for ( int j = i+1; j < N; j++ ) { p srodek1(0, 0); // FIXME p srodek2(0, 0); // FIXME int lres = 0; for ( int k = 0; k < N; k++ ) { if ( odl( srodek1, k ) > R ) { lres++; if ( N - lres < res ) break; } } res = max(res, lres); lres = 0; for ( int k = 0; k < N; k++ ) { if ( odl( srodek2, k ) > R ) { lres++; if ( N - lres < res ) break; } } res = max(res, lres); } } printf("It is possible to cover %d points.\n", res); return 0; } int main() { while ( ! fun() ) ; return 0; }