#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct node
{
int x0,x1;
};
struct node p[1006];
int cmp(const void *aa,const void *bb)
{
if ((*(int*)aa)>(*(int*)bb))
return(1);
else return(-1);
}
int main()
{
int x,y,flag;
int n,d,ans,temp;
int t=0;
int i;
while(scanf("%d%d",&n,&d))
{
if(n==0 && d==0) break;
flag=0;
ans=1;
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
if(y>d) flag=1;
p[i].x0=x-sqrt(d*d-y*y);
p[i].x1=x+sqrt(d*d-y*y);
}
printf("Case %d: ",++t);
if(flag)
{
printf("-1\n");
continue;
}
qsort(p,n,sizeof(p[0]),cmp);
temp=p[0].x1;
for(i=1;i<n;i++)
{
if(p[i].x1<temp) temp=p[i].x1;
else if(p[i].x0>temp)
{
ans++;
temp=p[i].x0;
}
}
printf("%d\n",ans);
}
return 0;
}
#include<stdlib.h>
#include<math.h>
struct node
{
int x0,x1;
};
struct node p[1006];
int cmp(const void *aa,const void *bb)
{
if ((*(int*)aa)>(*(int*)bb))
return(1);
else return(-1);
}
int main()
{
int x,y,flag;
int n,d,ans,temp;
int t=0;
int i;
while(scanf("%d%d",&n,&d))
{
if(n==0 && d==0) break;
flag=0;
ans=1;
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
if(y>d) flag=1;
p[i].x0=x-sqrt(d*d-y*y);
p[i].x1=x+sqrt(d*d-y*y);
}
printf("Case %d: ",++t);
if(flag)
{
printf("-1\n");
continue;
}
qsort(p,n,sizeof(p[0]),cmp);
temp=p[0].x1;
for(i=1;i<n;i++)
{
if(p[i].x1<temp) temp=p[i].x1;
else if(p[i].x0>temp)
{
ans++;
temp=p[i].x0;
}
}
printf("%d\n",ans);
}
return 0;
}