#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct rader
{
double left;
double right;
}a[1005];
bool cmp(rader x,rader y) //按照区间的右端点从小到大排序,如果右端点相等,那么按照左端点从大到小排序
{
return (x.right!=y.right)?(x.right<y.right):(x.left>y.left);
}
int main()
{
int num,rad;
while(~scanf("%d%d",&num,&rad),(num&&rad))
{
static int d=1;
int x,y;
for(int i=0;i<num;i++)
{
scanf("%d%d",&x,&y);
if(rad>=y)
{
a[i].left=x-sqrt((double)rad*rad-(double)y*y);///算的每一个区间的左右端点
a[i].right=x+sqrt((double)rad*rad-(double)y*y);
}
else
{
printf("-1\n");
continue;
}
}
sort(a,a+num,cmp);
double end=a[0].right;
int cnt=1;
for(int i=1;i<num;i++)
{
if(a[i].left>end)
{
end=a[i].right; / /如果后面的区间的左端点比上一次的(最后被选中最为比较标准)的区间的右端点小,那么就重新选一个标准区间的右端点作为标准
cnt++;
}
else
{
if(a[i].right<end)
end=a[i].right;
}
}
printf("Case %d: %d\n",d++,cnt);
}
return 0;
}
#include<math.h>
#include<algorithm>
using namespace std;
struct rader
{
double left;
double right;
}a[1005];
bool cmp(rader x,rader y) //按照区间的右端点从小到大排序,如果右端点相等,那么按照左端点从大到小排序
{
return (x.right!=y.right)?(x.right<y.right):(x.left>y.left);
}
int main()
{
int num,rad;
while(~scanf("%d%d",&num,&rad),(num&&rad))
{
static int d=1;
int x,y;
for(int i=0;i<num;i++)
{
scanf("%d%d",&x,&y);
if(rad>=y)
{
a[i].left=x-sqrt((double)rad*rad-(double)y*y);///算的每一个区间的左右端点
a[i].right=x+sqrt((double)rad*rad-(double)y*y);
}
else
{
printf("-1\n");
continue;
}
}
sort(a,a+num,cmp);
double end=a[0].right;
int cnt=1;
for(int i=1;i<num;i++)
{
if(a[i].left>end)
{
end=a[i].right; / /如果后面的区间的左端点比上一次的(最后被选中最为比较标准)的区间的右端点小,那么就重新选一个标准区间的右端点作为标准
cnt++;
}
else
{
if(a[i].right<end)
end=a[i].right;
}
}
printf("Case %d: %d\n",d++,cnt);
}
return 0;
}