#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>
#include <map>
#define LL long long
#define DB double
using namespace std;
const int N = 10009;
const int INF = 0x3f3f3f3f;
struct cpoint{
int x,y;
void get(){scanf("%d%d",&x,&y);}
} gd[N];
int k,n,s,d;
struct nod{
int l,r;
bool operator<(const nod t)const
{
return r<t.r||(r==t.r&&l<t.l);
}
} re[N];
bool ok(int dis)
{
//cout<<dis<<endl;
for(int i=0;i<n;i++)
{
int d1 = gd[i].y-k+dis;
if(d<d1) return false;
int c = (int)sqrt(1.0*d*d-1.0*d1*d1);
re[i].l = gd[i].x - c;
re[i].r = gd[i].x + c;
}
sort(re,re+n);
int ans = 1 ;
int r = re[0].r;
for(int i=1;i<n;i++)
{
if(re[i].l>r)
{
ans++;
r = re[i].r;
}
}
return ans<=s;
}
int solve()
{
int ret=-1;
int l = 0,r = INF,mid;
while(l<=r)
{
mid = (l+r)>>1;
if(ok(mid))
{
ret = mid;
l = mid+1;
}else
r = mid-1;
}return ret;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int cas,T=1;scanf("%d",&cas);
while(cas--)
{
scanf("%d%d%d%d",&k,&n,&s,&d);
for(int i=0;i<n;i++)
gd[i].get();
int ans = solve();
printf("Case %d: ",T++);
if(ans<=0) printf("impossible\n");
else printf("%d\n",ans);
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>
#include <map>
#define LL long long
#define DB double
using namespace std;
const int N = 10009;
const int INF = 0x3f3f3f3f;
struct cpoint{
int x,y;
void get(){scanf("%d%d",&x,&y);}
} gd[N];
int k,n,s,d;
struct nod{
int l,r;
bool operator<(const nod t)const
{
return r<t.r||(r==t.r&&l<t.l);
}
} re[N];
bool ok(int dis)
{
//cout<<dis<<endl;
for(int i=0;i<n;i++)
{
int d1 = gd[i].y-k+dis;
if(d<d1) return false;
int c = (int)sqrt(1.0*d*d-1.0*d1*d1);
re[i].l = gd[i].x - c;
re[i].r = gd[i].x + c;
}
sort(re,re+n);
int ans = 1 ;
int r = re[0].r;
for(int i=1;i<n;i++)
{
if(re[i].l>r)
{
ans++;
r = re[i].r;
}
}
return ans<=s;
}
int solve()
{
int ret=-1;
int l = 0,r = INF,mid;
while(l<=r)
{
mid = (l+r)>>1;
if(ok(mid))
{
ret = mid;
l = mid+1;
}else
r = mid-1;
}return ret;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int cas,T=1;scanf("%d",&cas);
while(cas--)
{
scanf("%d%d%d%d",&k,&n,&s,&d);
for(int i=0;i<n;i++)
gd[i].get();
int ans = solve();
printf("Case %d: ",T++);
if(ans<=0) printf("impossible\n");
else printf("%d\n",ans);
}
return 0;
}