#include <bits/stdc++.h>
using namespace std;
int main() {
int t,n1,k;
cin>>t;
while(t--){
cin>>n1>>k;
int A[n1];
for(int i = 0 ; i<n1 ; i++){
cin>>A[i];
}
int presum[n1+1];
for(int i = 0 ; i<n1+1 ; i++){
presum[i] = 0;
}
map<int,int>map1,map2;
for(int i = 1 ; i<=n1 ; i++){
presum[i] = presum[i-1]+A[i-1];
}
for(int i = 0 ; i<=n1 ; i++){
if(map1.find(presum[i])==map1.end()){
map1[presum[i]] = i;
}
map2[presum[i]] = i;
}
int maxi = 0,mini=INT_MAX;
for(int i = 1 ; i<=n1 ; i++){
if(map1.find(presum[i]-k)!=map1.end()){
maxi = max(maxi,abs(i-map1[presum[i]-k]));
}
if(map2.find(presum[i]-k)!=map2.end()){
mini = min(mini,abs(i-map2[presum[i]-k]));
}
}
int cnt1 = 0,cnt2=0;
for(int i = 1 ; i<=n1 ; i++){
if(map1.find(presum[i]-k)!=map1.end()){
if(maxi==(i-map1[presum[i]-k])){
cnt1++;
}
}
if(map2.find(presum[i]-k)!=map2.end()){
if(mini==(i-map2[presum[i]-k])){
cnt2++;
}
}
}
cout<<cnt2<<" "<<cnt1<<endl;//cnt2 --> shortest subarrays count cnt1 --> longest subarrays count
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKaW50IG1haW4oKSB7CglpbnQgdCxuMSxrOwoJY2luPj50OwoJd2hpbGUodC0tKXsKICAgIGNpbj4+bjE+Pms7CiAgICBpbnQgQVtuMV07CiAgICBmb3IoaW50IGkgPSAwIDsgaTxuMSA7IGkrKyl7CiAgICAgICAgY2luPj5BW2ldOwogICAgfQogICAgaW50IHByZXN1bVtuMSsxXTsKICAgIGZvcihpbnQgaSA9IDAgOyBpPG4xKzEgOyBpKyspewogICAgICAgIHByZXN1bVtpXSA9IDA7CiAgICB9CiAgICBtYXA8aW50LGludD5tYXAxLG1hcDI7CiAgICBmb3IoaW50IGkgPSAxIDsgaTw9bjEgOyBpKyspewogICAgICAgIHByZXN1bVtpXSA9IHByZXN1bVtpLTFdK0FbaS0xXTsKICAgIH0KICAgIGZvcihpbnQgaSA9IDAgOyBpPD1uMSA7IGkrKyl7CiAgICAgICAgaWYobWFwMS5maW5kKHByZXN1bVtpXSk9PW1hcDEuZW5kKCkpewogICAgICAgICAgICBtYXAxW3ByZXN1bVtpXV0gPSBpOwogICAgICAgIH0KICAgICAgICBtYXAyW3ByZXN1bVtpXV0gPSBpOwogICAgfQogICAgaW50IG1heGkgPSAwLG1pbmk9SU5UX01BWDsKICAgIGZvcihpbnQgaSA9IDEgOyBpPD1uMSA7IGkrKyl7CiAgICAgICAgaWYobWFwMS5maW5kKHByZXN1bVtpXS1rKSE9bWFwMS5lbmQoKSl7CiAgICAgICAgICAgIG1heGkgPSBtYXgobWF4aSxhYnMoaS1tYXAxW3ByZXN1bVtpXS1rXSkpOwogICAgICAgIH0KICAgICAgICBpZihtYXAyLmZpbmQocHJlc3VtW2ldLWspIT1tYXAyLmVuZCgpKXsKICAgICAgICAgICAgbWluaSA9IG1pbihtaW5pLGFicyhpLW1hcDJbcHJlc3VtW2ldLWtdKSk7CiAgICAgICAgfQogICAgfQogICAgaW50IGNudDEgPSAwLGNudDI9MDsKICAgIGZvcihpbnQgaSA9IDEgOyBpPD1uMSA7IGkrKyl7CiAgICAgICAgaWYobWFwMS5maW5kKHByZXN1bVtpXS1rKSE9bWFwMS5lbmQoKSl7CiAgICAgICAgICAgIGlmKG1heGk9PShpLW1hcDFbcHJlc3VtW2ldLWtdKSl7CiAgICAgICAgICAgICAgICBjbnQxKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYobWFwMi5maW5kKHByZXN1bVtpXS1rKSE9bWFwMi5lbmQoKSl7CiAgICAgICAgICAgIGlmKG1pbmk9PShpLW1hcDJbcHJlc3VtW2ldLWtdKSl7CiAgICAgICAgICAgICAgICBjbnQyKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBjb3V0PDxjbnQyPDwiICI8PGNudDE8PGVuZGw7Ly9jbnQyIC0tPiBzaG9ydGVzdCBzdWJhcnJheXMgY291bnQgY250MSAtLT4gbG9uZ2VzdCBzdWJhcnJheXMgY291bnQKCX0KCXJldHVybiAwOwp9