#include<bits/stdc++.h>
using namespace std;
#define int long long
int read(){
int x=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return x;
}
void output(int x){
if(x>9) output(x/10);
putchar(x%10|48);
}
int n,m,T,dp[100001][4];
bool flag[100001][4];
void work(){
n=read();
m=read();
int answer=0;
memset(flag,false,sizeof(flag));
for(int i=1,ma0,ma1,ma2;i<=n;i++){
ma0=read();
ma1=m/ma0;
ma2=m/ma1;
if(max(ma1,max(ma2,ma0))==ma2){
flag[i][2]=true;
}
if(max(ma1,max(ma2,ma0))==ma1){
flag[i][1]=true;
}
if(max(ma1,max(ma2,ma0))==ma0){
flag[i][0]=true;
}
answer+=max(ma1,max(ma2,ma0));
}
output(answer);
putchar(' ');
memset(dp,0x3f,sizeof(dp));
dp[0][0]=0;
for(int i=1;i<=n;i++){
if(flag[i][0]==true){
dp[i][0]=min(dp[i][0],dp[i-1][0]);
dp[i][0]=min(dp[i][0],dp[i-1][1]);
dp[i][0]=min(dp[i][0],dp[i-1][2]);
}
if(flag[i][1]==true){
dp[i][1]=min(dp[i][1],dp[i-1][0]+1);
dp[i][1]=min(dp[i][1],dp[i-1][1]);
dp[i][1]=min(dp[i][1],dp[i-1][2]);
}
if(flag[i][2]==true){
dp[i][2]=min(dp[i][2],dp[i-1][0]+2);
dp[i][2]=min(dp[i][2],dp[i-1][1]+1);
dp[i][2]=min(dp[i][2],dp[i-1][2]);
}
}
output(min(dp[n][1],min(dp[n][2],dp[n][0])));
puts("");
}
signed main(){
cin>>T;
while(T--) work();
}
预期复杂度应该是O(∑n),但是TLE