#include<bits/stdc++.h>
using namespace std;
int T;
void solve(int testcase)
{
long long n,k;
cin>>n>>k;
vector<int> a(n);
for(int i=0;i<n;i++)cin>>a[i];
int maxv=*max_element(a.begin(),a.end());
int minv=*min_element(a.begin(),a.end());
if(n==1 or maxv==minv)
{
cout<<k<<" "<<(1+k)*k/2<<endl;
return ;
}
stack<int> sta;
set<pair<int,int>> checkList;
for(int i=0;i<n;i++)
{
while(sta.size() and sta.top()>=a[i])
sta.pop();
if(sta.size())
checkList.insert({a[i],sta.top()});
sta.push(a[i]);
}
while(sta.size())sta.pop();
for(int i=n-1;i>=0;i--)
{
while(sta.size() and sta.top()>=a[i])
sta.pop();
if(sta.size())
checkList.insert({a[i],sta.top()});
sta.push(a[i]);
}
auto generate=[&k](int x,int y)
{
if(x<y)swap(x,y);
vector<int> fir,sec;
for(int i=1;i<=sqrt(x-y);i++)
{
if((x-y)%i==0)fir.push_back(i);
if((x-y)/i!=i)fir.push_back((x-y)/i);
}
for(auto ri:fir)
if(ri-y>=1 and ri-y<=k)
sec.push_back(ri-y);
return sec;
};
long long cnt=0,sum=0;
auto x=generate(maxv,minv);
for(int xi:x)
{
bool flag=true;
for(auto [u,v]:checkList)
{
if((u+xi)%(v+xi)!=0)
{
flag=false;
break;
}
}
if(flag)
{
cnt++;
sum+=xi;
}
}
cout<<cnt<<" "<<sum<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin>>T;
for(int i=1;i<=T;i++)solve(i);
return 0;
}