int main() {

    point   A[1000],    B[1000];
    
    int n,  s;
    
    int     T,  N,  L;
    
    point   P;
    
    for( scanf( "%d", &T ); T--; ) {
        
        scanf( "%d%d", &N, &L );
        
        for( int i = 0; i < N; ++i )
            scanf( "%lf%lf", &A[i].x, &A[i].y );
        
        _graham( N, A, s=0, B );
        
        double  ans = 2.0 * PI * L;
        
        for( int i = 0; i < s; ++i )
            ans += hypot(B[i].x-B[(i+1)%s].x,B[i].y-B[(i+1)%s].y);

        printf( "%d\n", int( ans + 0.5 ) );
        
        if( T ) puts( "" );
        
    }
    
}
int graham(int n,point* p,point* convex,int maxsize=1,int dir=1){
//point* temp=new point[n];
int s,i;
_graham(n,p,s,temp);
for (convex[0]=temp[0],n=1,i=(dir?1:(s-1));dir?(i<s):i;i+=(dir?1:-1))
if (maxsize||!zero(xmult(temp[i-1],temp[i],temp[(i+1)%s])))
convex[n++]=temp[i];
//delete []temp;
return n;
}