#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
inline int power(int a, int b) {
int x = 1;
while (b) {
if (b & 1) x *= a;
a *= a;
b >>= 1;
}
return x;
}
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
//_ ***************************** START Below *******************************
vector<int> a;
int bruteforce(int n, int k1, int k2){
int ans = 0;
for(int i=0; i<n-2; i++){
for(int j=i+1; j<n-2; j++){
int leftSum = a[i] + a[j];
if(leftSum <= k1) continue;
for(int k=j+1; k<n-1; k++){
for(int l=k+1; l<n; l++){
int rightSum = a[k] + a[l];
if(rightSum > k2 ) ans++;
}
}
}
}
return ans;
}
//* Global 2 ptr * local 2 ptr
//* O(n^2)
//* [ 1 2 2 2 3 ] , k1 = 3, k2 = 3
//* i j | s e
//* [ ( 1 2 2 2 ) |(2 3) ]
//* 2 * 1
//* i j | s e
//* [ 1 ( 2 2 ) |(2 2 3) ]
//* 1 * 3
int consistency1(int n, int k1, int k2) {
int ans = 0;
int i = 0, j = n-3;
while(i<j){
if(a[i] + a[j] <= k1){
i++;
}
else{
int right = 0;
int s = j+1;
int e = n-1;
while(s<e){
if(a[s]+a[e] <= k2){
s++;
}
else{
right += e-s;
e--;
}
}
int left = j-i;
ans += left*right;
j--;
}
}
return ans;
}
//* template 2
int consistency2(int n, int k1, int k2) {
int ans = 0;
for(int j=n-3, i=0; j>=1; j--){
int left = 0;
while(i<j && a[i]+a[j] <= k1) i++;
if(i==j) break;
left += j-i;
int right = 0;
int s = j+1, e = n-1;
while(s<e){
if(a[s] + a[e] <= k2) s++;
else {
right += e-s;
e--;
}
}
ans += (left * right);
}
return ans;
}
//* O(n^2)
int consistency3(int n, int k1, int k2) {
int ans = 0;
for(int j=1; j<n-2; j++){
int i=0;
while(i<j && a[i]+a[j] <= k1) i++;
int left = j-i;
int s= j+1, e = n-1;
int right = 0;
while(s<e){
if(a[s]+a[e] > k2){
right += (e-s);
e--;
}
else{
s++;
}
}
ans += left * right;
}
return ans;
}
int practice(int n, int k1, int k2) {
int ans = 0;
return ans;
}
void solve() {
int n, k1, k2;
cin >> n >> k1 >> k2;
a.resize(n);
for(int i=0; i<n; i++) cin >> a[i];
cout << bruteforce(n, k1, k2) << " ";
cout << consistency1(n, k1, k2) << " ";
cout << consistency2(n, k1, k2) << " ";
cout << consistency3(n, k1, k2) << endl;
// cout << bruteforce(n, k1, k2) << " -> ";
// cout << practice(n, k1, k2) << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYikgewogICAgaW50IHggPSAxOwogICAgd2hpbGUgKGIpIHsKICAgICAgICBpZiAoYiAmIDEpIHggKj0gYTsKICAgICAgICBhICo9IGE7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiB4Owp9CgoKY29uc3QgaW50IE0gPSAxMDAwMDAwMDA3Owpjb25zdCBpbnQgTiA9IDNlNSs5Owpjb25zdCBpbnQgSU5GID0gMmU5KzE7CmNvbnN0IGludCBMSU5GID0gMjAwMDAwMDAwMDAwMDAwMDAwMTsKCi8vXyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTVEFSVCBCZWxvdyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoKCnZlY3RvcjxpbnQ+IGE7CgoKaW50IGJydXRlZm9yY2UoaW50IG4sIGludCBrMSwgaW50IGsyKXsKCWludCBhbnMgPSAwOwoJCglmb3IoaW50IGk9MDsgaTxuLTI7IGkrKyl7CgkJZm9yKGludCBqPWkrMTsgajxuLTI7IGorKyl7CgkJCWludCBsZWZ0U3VtID0gYVtpXSArIGFbal07CgkJCWlmKGxlZnRTdW0gPD0gazEpIGNvbnRpbnVlOwoJCQkKCQkJZm9yKGludCBrPWorMTsgazxuLTE7IGsrKyl7CgkJCQlmb3IoaW50IGw9aysxOyBsPG47IGwrKyl7CgkJCQkJaW50IHJpZ2h0U3VtID0gYVtrXSArIGFbbF07CgkJCQkJaWYocmlnaHRTdW0gPiBrMiApIGFucysrOwoJCQkJfQoJCQl9CgkJfQoJfQoJcmV0dXJuIGFuczsKfQoKCgoKLy8qIEdsb2JhbCAyIHB0ciAqIGxvY2FsIDIgcHRyCgovLyogTyhuXjIpCgovLyogWyAxIDIgMiAyIDMgXSAsIGsxID0gMywgazIgPSAzCgovLyogICAgIGkgICAgICBqICAgfCBzIGUKLy8qIFsgKCAxIDIgMiAgMiApIHwoMiAzKSBdCi8vKiAgICAgCTIgICAgICAqICAxCgovLyogICAgICAgaSBqICAgfCBzICAgZQovLyogWyAxICggMiAyICkgfCgyIDIgMykgXQovLyogICAgICAgIDEgICAgKiAgIDMKCmludCBjb25zaXN0ZW5jeTEoaW50IG4sIGludCBrMSwgaW50IGsyKSB7CgkKCWludCBhbnMgPSAwOwoKCWludCBpID0gMCwgaiA9IG4tMzsKCgl3aGlsZShpPGopewoJCWlmKGFbaV0gKyBhW2pdIDw9IGsxKXsKCQkJaSsrOwoJCX0KCQllbHNlewoJCQlpbnQgcmlnaHQgPSAwOwoJCQlpbnQgcyA9IGorMTsKCQkJaW50IGUgPSBuLTE7CgkJCXdoaWxlKHM8ZSl7CgkJCQlpZihhW3NdK2FbZV0gPD0gazIpewoJCQkJCXMrKzsKCQkJCX0KCQkJCWVsc2V7CgkJCQkJcmlnaHQgKz0gZS1zOwoJCQkJCWUtLTsKCQkJCX0KCQkJfQoJCQkKCQkJaW50IGxlZnQgPSBqLWk7CgkJCQoJCQlhbnMgKz0gbGVmdCpyaWdodDsKCQkJCgkJCWotLTsKCQl9Cgl9CgoKCXJldHVybiBhbnM7CgkKfQoKCgovLyogdGVtcGxhdGUgMgppbnQgY29uc2lzdGVuY3kyKGludCBuLCBpbnQgazEsIGludCBrMikgewoJCglpbnQgYW5zID0gMDsKCQoJZm9yKGludCBqPW4tMywgaT0wOyBqPj0xOyBqLS0pewoJCWludCBsZWZ0ID0gMDsKCQl3aGlsZShpPGogJiYgYVtpXSthW2pdIDw9IGsxKSBpKys7CgkJaWYoaT09aikgYnJlYWs7CgkJbGVmdCArPSBqLWk7CgkJCgkJaW50IHJpZ2h0ID0gMDsKCQlpbnQgcyA9IGorMSwgZSA9IG4tMTsKCQl3aGlsZShzPGUpewoJCQlpZihhW3NdICsgYVtlXSA8PSBrMikgcysrOwoJCQllbHNlIHsKCQkJCXJpZ2h0ICs9IGUtczsKCQkJCWUtLTsKCQkJfQoJCX0KCQkKCQlhbnMgKz0gKGxlZnQgKiByaWdodCk7CgkJCgl9CgkKCXJldHVybiBhbnM7CgkKfQoKCgoKCgoKLy8qIE8obl4yKQppbnQgY29uc2lzdGVuY3kzKGludCBuLCBpbnQgazEsIGludCBrMikgewoJCglpbnQgYW5zID0gMDsKCWZvcihpbnQgaj0xOyBqPG4tMjsgaisrKXsKCQlpbnQgaT0wOwoJCXdoaWxlKGk8aiAmJiBhW2ldK2Fbal0gPD0gazEpIGkrKzsKCQlpbnQgbGVmdCA9IGotaTsKCQkKCQlpbnQgIHM9IGorMSwgZSA9IG4tMTsKCQlpbnQgcmlnaHQgPSAwOwoJCXdoaWxlKHM8ZSl7CgkJCWlmKGFbc10rYVtlXSA+IGsyKXsKCQkJCXJpZ2h0ICs9IChlLXMpOwoJCQkJZS0tOwoJCQl9CgkJCWVsc2V7CgkJCQlzKys7CgkJCX0KCQl9CgkJYW5zICs9IGxlZnQgKiByaWdodDsKCX0KCQoJcmV0dXJuIGFuczsKfQoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKaW50IHByYWN0aWNlKGludCBuLCBpbnQgazEsIGludCBrMikgewoJCglpbnQgYW5zID0gMDsKCQoJCglyZXR1cm4gYW5zOwoJCn0KCgp2b2lkIHNvbHZlKCkgewogICAgCglpbnQgbiwgazEsIGsyOwoJY2luID4+IG4gPj4gazEgPj4gazI7CgkKCWEucmVzaXplKG4pOwoJZm9yKGludCBpPTA7IGk8bjsgaSsrKSBjaW4gPj4gYVtpXTsKICAgIAogICAgY291dCA8PCBicnV0ZWZvcmNlKG4sIGsxLCBrMikgPDwgIiAiOwogICAgY291dCA8PCBjb25zaXN0ZW5jeTEobiwgazEsIGsyKSA8PCAiICI7CiAgICBjb3V0IDw8IGNvbnNpc3RlbmN5MihuLCBrMSwgazIpIDw8ICIgIjsKICAgIGNvdXQgPDwgY29uc2lzdGVuY3kzKG4sIGsxLCBrMikgPDwgZW5kbDsKICAgIAogICAgCiAgICAvLyBjb3V0IDw8IGJydXRlZm9yY2UobiwgazEsIGsyKSA8PCAiIC0+ICI7CiAgICAvLyBjb3V0IDw8IHByYWN0aWNlKG4sIGsxLCBrMikgPDwgZW5kbDsKICAgIAp9CgoKCgoKaW50MzJfdCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CgogICAgaW50IHQgPSAxOwogICAgY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==