#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=(k);++i)
#define drp(i,j,k) for(int i=j;i>=(k);--i)
#define isdigit(ch) (ch>=48&&ch<=57)
#define mp std::make_pair
#define mod 1000000007
#define MAXN 1000005
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef std::pair<int,int> pii;
typedef std::pair<ll,ll> pll;
inline int read(){
int x=0;
bool sgn=true;
char ch=getchar();
while(!isdigit(ch)) sgn^=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return sgn?x:-x;
}
inline ll readll(){
ll x=0;
bool sgn=true;
char ch=getchar();
while(!isdigit(ch)) sgn^=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return sgn?x:-x;
}
template <typename tp> inline tp min(tp x,tp y){return x<y?x:y;}
template <typename tp> inline tp max(tp x,tp y){return x>y?x:y;}
template <typename tp> inline bool chkmin(tp &x,tp y){return x>y&&(x=y,true);}
template <typename tp> inline bool chkmax(tp &x,tp y){return x<y&&(x=y,true);}
int n;
ll r;
struct point{
ll x,y;
inline point operator + (const point &rhs)const{
return (point){x+rhs.x,y+rhs.y};
}
inline point operator - (const point &rhs)const{
return (point){x-rhs.x,y-rhs.y};
}
inline point operator * (ll val)const{
return (point){x*val,y*val};
}
}p,a[MAXN];
struct line{
point st,ed;
inline ll sqlen()const{
return (st.x-ed.x)*(st.x-ed.x)+(st.y-ed.y)*(st.y-ed.y);
}
};
inline ll dot(const point &lhs,const point &rhs){
return lhs.x*rhs.x+lhs.y*rhs.y;
}
inline ll cross(const point &lhs,const point &rhs){
return lhs.x*rhs.y-lhs.y*rhs.x;
}=
inline bool chk(const line &l){
return (__int128)cross(l.st-p,l.ed-p)*cross(l.st-p,l.ed-p)>=(__int128)r*r*l.sqlen();
}
inline ll solve(){
int cur=2;
ll ret=0,ans=0;
rep(i,1,n){
while(cur<i+n-1){
if(cross(p-a[i],a[cur+1]-a[i])<=0) break;
if(!chk((line){a[i],a[cur+1]})) break;
ret+=cross(a[cur+1]-a[i],a[cur]-a[i]);
++cur;
}
chkmax(ans,ret);
ret-=cross(a[cur]-a[i+1],a[cur]-a[i]);
}
return ans;
}
int main(){
drp(task,read(),1){
n=read();
p.x=read(),p.y=read(),r=read();
rep(i,1,n) a[i].x=read(),a[i].y=read();
std::reverse(a+1,a+n+1);
rep(i,1,n) a[i+n]=a[i];
printf("%lld\n",solve());
}
}