#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 s = 0, e = n-3;
while(s<e){
if(a[s] + a[e] <= k1){
s++;
}
else{
int left = e-s;
int right = 0;
int l = e+1;
int r = n-1;
while(l<r){
if(a[l]+a[r] <= k2){
l++;
}
else{
right += r-l;
r--;
}
}
ans += left*right;
e--;
}
}
return ans;
}
//* O(n^2)
int consistency2(int n, int k1, int k2) {
int ans = 0;
for(int j=1; j<n-2; j++){
int i=j-1;
while(i>=0 && a[i]+a[j] > k1) i--;
int left = j-i-1;
int right = 0;
int s= j+1, e = n-1;
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 << 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+IGE7CgoKaW50IGJydXRlZm9yY2UoaW50IG4sIGludCBrMSwgaW50IGsyKXsKCWludCBhbnMgPSAwOwoJCglmb3IoaW50IGk9MDsgaTxuLTI7IGkrKyl7CgkJZm9yKGludCBqPWkrMTsgajxuLTI7IGorKyl7CgkJCWludCBsZWZ0U3VtID0gYVtpXSArIGFbal07CgkJCWlmKGxlZnRTdW0gPD0gazEpIGNvbnRpbnVlOwoJCQkKCQkJZm9yKGludCBrPWorMTsgazxuLTE7IGsrKyl7CgkJCQlmb3IoaW50IGw9aysxOyBsPG47IGwrKyl7CgkJCQkJaW50IHJpZ2h0U3VtID0gYVtrXSArIGFbbF07CgkJCQkJaWYocmlnaHRTdW0gPiBrMiApIGFucysrOwoJCQkJfQoJCQl9CgkJfQoJfQoJcmV0dXJuIGFuczsKfQoKCgoKLy8qIEdsb2JhbCAyIHB0ciAqIGxvY2FsIDIgcHRyCgovLyogTyhuXjIpCgovLyogWyAxIDIgMiAyIDMgXSAsIGsxID0gMywgazIgPSAzCgovLyogICAgIGkgICAgICBqICAgfCBzIGUKLy8qIFsgKCAxIDIgMiAgMiApIHwoMiAzKSBdCi8vKiAgICAgCTIgICAgICAqICAxCgovLyogICAgICAgaSBqICAgfCBzICAgZQovLyogWyAxICggMiAyICkgfCgyIDIgMykgXQovLyogICAgICAgIDEgICAgKiAgIDMKCmludCBjb25zaXN0ZW5jeTEoaW50IG4sIGludCBrMSwgaW50IGsyKSB7CgkKCWludCBhbnMgPSAwOwoKCWludCBzID0gMCwgZSA9IG4tMzsKCgl3aGlsZShzPGUpewoJCWlmKGFbc10gKyBhW2VdIDw9IGsxKXsKCQkJcysrOwoJCX0KCQllbHNlewoJCQlpbnQgbGVmdCA9IGUtczsKCQkJaW50IHJpZ2h0ID0gMDsKCQkJCgkJCWludCBsID0gZSsxOwoJCQlpbnQgciA9IG4tMTsKCQkJCgkJCXdoaWxlKGw8cil7CgkJCQlpZihhW2xdK2Fbcl0gPD0gazIpewoJCQkJCWwrKzsKCQkJCX0KCQkJCWVsc2V7CgkJCQkJcmlnaHQgKz0gci1sOwoJCQkJCXItLTsKCQkJCX0KCQkJfQoJCQkKCQkJYW5zICs9IGxlZnQqcmlnaHQ7CgkJCWUtLTsKCQl9Cgl9CgoKCXJldHVybiBhbnM7CgkKfQoKCgoKLy8qIE8obl4yKQppbnQgY29uc2lzdGVuY3kyKGludCBuLCBpbnQgazEsIGludCBrMikgewoJCglpbnQgYW5zID0gMDsKCWZvcihpbnQgaj0xOyBqPG4tMjsgaisrKXsKCQkKCQlpbnQgaT1qLTE7CgkJd2hpbGUoaT49MCAmJiBhW2ldK2Fbal0gPiBrMSkgaS0tOwoJCQoJCWludCBsZWZ0ID0gai1pLTE7CgkJaW50IHJpZ2h0ID0gMDsKCQkKCQlpbnQgIHM9IGorMSwgZSA9IG4tMTsKCQkKCQl3aGlsZShzPGUpewoJCQlpZihhW3NdK2FbZV0gPiBrMil7CgkJCQlyaWdodCArPSAoZS1zKTsKCQkJCWUtLTsKCQkJfQoJCQllbHNlewoJCQkJcysrOwoJCQl9CgkJfQoJCWFucyArPSBsZWZ0ICogcmlnaHQ7Cgl9CgkKCXJldHVybiBhbnM7Cn0KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmludCBwcmFjdGljZShpbnQgbiwgaW50IGsxLCBpbnQgazIpIHsKCQoJaW50IGFucyA9IDA7CgkKCQoJcmV0dXJuIGFuczsKCQp9CgoKdm9pZCBzb2x2ZSgpIHsKICAgIAoJaW50IG4sIGsxLCBrMjsKCWNpbiA+PiBuID4+IGsxID4+IGsyOwoJCglhLnJlc2l6ZShuKTsKCWZvcihpbnQgaT0wOyBpPG47IGkrKykgY2luID4+IGFbaV07CiAgICAKICAgIGNvdXQgPDwgYnJ1dGVmb3JjZShuLCBrMSwgazIpIDw8ICIgLT4gIjsKICAgIGNvdXQgPDwgY29uc2lzdGVuY3kxKG4sIGsxLCBrMikgPDwgIiAiOwogICAgY291dCA8PCBjb25zaXN0ZW5jeTIobiwgazEsIGsyKSA8PCAiICI7CiAgICBjb3V0IDw8IGVuZGw7CiAgICAKICAgIC8vIGNvdXQgPDwgYnJ1dGVmb3JjZShuLCBrMSwgazIpIDw8ICIgLT4gIjsKICAgIC8vIGNvdXQgPDwgcHJhY3RpY2UobiwgazEsIGsyKSA8PCBlbmRsOwogICAgCn0KCgoKCgppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpbnQgdCA9IDE7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9