/*
* POJ1328 Radar Installation 区间贪心
http://poj.org/problem?id=1328
尽可能少的雷达站:贪心策略
转换思维:以岛屿为核心
ps:控制台组之间 输入多个换行符居然可以!!!
注意理解
Presentation Error 显示错误 输出格式 空格不对引起
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN = 1010;
struct Interval{
double left;
double right;
};
Interval arr[MAXN];
bool Compare(Interval a,Interval b){
return a.left < b.left;
}
int main(){
int n,d;
int caseNumber = 0;
while(scanf("%d%d",&n,&d) != EOF){
if(n==0 && d == 0){
break;
}
bool flag = true;
caseNumber++;
for(int i=0;i<n;++i){
int x,y;
scanf("%d%d",&x,&y);
if(y>d) {
flag = false;
}
else{
arr[i].left = x - sqrt(d*d - 1.0*y*y);//或者强制类型转换
arr[i].right = x + sqrt(d*d - 1.0*y*y);
}
}
if(!flag){
printf("Case %d: %d\n",caseNumber,-1);
}else{
sort(arr,arr+n,Compare);
double current = arr[0].right;
int answer = 1;
for(int i=1;i<n;++i){
if(arr[i].left <= current){ //!!!
current = min(current,arr[i].right);
}else{
current = arr[i].right;
answer++;
}
}
printf("Case %d: %d\n",caseNumber,answer);
}
}
return 0;
}