#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
const double eps=1e-10;
const double PI=acos(-1.0);
int sgn(long double x)
{
if(fabs(x)<eps)
return 0;
if(x<0)
return -1;
else
return 1;
}
struct Point
{
long double x,y;
long double r;
Point(){}
Point(long double _x,long double _y)
{
x=_x;
y=_y;
}
Point operator -(const Point &b)const
{
return Point(x-b.x,y-b.y);
}
long double operator ^(const Point &b)const
{
return x*b.y-y*b.x;
}
long double operator *(const Point &b)const
{
return x*b.x+y*b.y;
}
};
long double dist(Point a,Point b)
{
return sqrt((a-b)*(a-b));
}
Point p[1111];
int main()
{
int n;
cin>>n;
while(n--)
{
int m,R;
cin>>m>>R;
Point p1=Point(0,0);
p1.r=R;
long double at1=0;
long double sum2=0;
for(int i=0;i<m;i++)
{
cin>>p[i].x>>p[i].y>>p[i].r;
if(sgn(dist(p1,p[i])+p[i].r-R)<0||sgn(dist(p1,p[i])-R-p[i].r>=0))
continue;
long double dist1=dist(p1,p[i]);
at1+=2*acos((R*R+dist1*dist1-p[i].r*p[i].r)/(2.0*dist1*R));
long double atn;
atn=2*acos((p[i].r*p[i].r+dist1*dist1-R*R)/(2.0*p[i].r*dist1));
sum2+=atn*p[i].r;
}
sum2+=(2.0*PI-at1)*R;
cout<<setprecision(20)<<sum2<<endl;
}
return 0;
}