#include <bits/stdc++.h>
using namespace std;
using ll = long long;
// Count number of subarrays of `v` whose sum is exactly S
ll count_subarrays_with_sum(const vector<ll>& v, ll S) {
unordered_map<ll,int> cnt;
cnt.reserve(v.size()*2);
cnt[0] = 1;
ll pref = 0, ans = 0;
for (ll x : v) {
pref += x;
auto it = cnt.find(pref - S);
if (it != cnt.end()) ans += it->second;
cnt[pref]++;
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while (T--) {
int n;
ll S, X;
cin >> n >> S >> X;
vector<ll> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
ll answer = 0;
int i = 0;
while (i < n) {
// skip any element > X, they cannot belong to a valid segment
if (a[i] > X) {
i++;
continue;
}
// gather the maximal block [i..j) in which all a[k] <= X
int j = i;
vector<ll> block;
while (j < n && a[j] <= X) {
block.push_back(a[j]);
j++;
}
// 1) Count all subarrays in this block whose sum == S
ll total_in_block = count_subarrays_with_sum(block, S);
// 2) Subtract those that NEVER hit X (i.e., all elements < X)
// split `block` on positions where block[k] == X
ll noX_count = 0;
int k = 0, B = block.size();
while (k < B) {
if (block[k] == X) {
k++;
continue;
}
int l = k;
vector<ll> sub;
while (l < B && block[l] != X) {
sub.push_back(block[l]);
l++;
}
noX_count += count_subarrays_with_sum(sub, S);
k = l;
}
answer += (total_in_block - noX_count);
i = j; // move past this block
}
cout << answer << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKLy8gQ291bnQgbnVtYmVyIG9mIHN1YmFycmF5cyBvZiBgdmAgd2hvc2Ugc3VtIGlzIGV4YWN0bHkgUwpsbCBjb3VudF9zdWJhcnJheXNfd2l0aF9zdW0oY29uc3QgdmVjdG9yPGxsPiYgdiwgbGwgUykgewogICAgdW5vcmRlcmVkX21hcDxsbCxpbnQ+IGNudDsKICAgIGNudC5yZXNlcnZlKHYuc2l6ZSgpKjIpOwogICAgY250WzBdID0gMTsKICAgIGxsIHByZWYgPSAwLCBhbnMgPSAwOwogICAgZm9yIChsbCB4IDogdikgewogICAgICAgIHByZWYgKz0geDsKICAgICAgICBhdXRvIGl0ID0gY250LmZpbmQocHJlZiAtIFMpOwogICAgICAgIGlmIChpdCAhPSBjbnQuZW5kKCkpIGFucyArPSBpdC0+c2Vjb25kOwogICAgICAgIGNudFtwcmVmXSsrOwogICAgfQogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IFQ7CiAgICBjaW4gPj4gVDsKICAgIHdoaWxlIChULS0pIHsKICAgICAgICBpbnQgbjsKICAgICAgICBsbCBTLCBYOwogICAgICAgIGNpbiA+PiBuID4+IFMgPj4gWDsKICAgICAgICB2ZWN0b3I8bGw+IGEobik7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgfQoKICAgICAgICBsbCBhbnN3ZXIgPSAwOwogICAgICAgIGludCBpID0gMDsKICAgICAgICB3aGlsZSAoaSA8IG4pIHsKICAgICAgICAgICAgLy8gc2tpcCBhbnkgZWxlbWVudCA+IFgsIHRoZXkgY2Fubm90IGJlbG9uZyB0byBhIHZhbGlkIHNlZ21lbnQKICAgICAgICAgICAgaWYgKGFbaV0gPiBYKSB7CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gZ2F0aGVyIHRoZSBtYXhpbWFsIGJsb2NrIFtpLi5qKSBpbiB3aGljaCBhbGwgYVtrXSA8PSBYCiAgICAgICAgICAgIGludCBqID0gaTsKICAgICAgICAgICAgdmVjdG9yPGxsPiBibG9jazsKICAgICAgICAgICAgd2hpbGUgKGogPCBuICYmIGFbal0gPD0gWCkgewogICAgICAgICAgICAgICAgYmxvY2sucHVzaF9iYWNrKGFbal0pOwogICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyAxKSBDb3VudCBhbGwgc3ViYXJyYXlzIGluIHRoaXMgYmxvY2sgd2hvc2Ugc3VtID09IFMKICAgICAgICAgICAgbGwgdG90YWxfaW5fYmxvY2sgPSBjb3VudF9zdWJhcnJheXNfd2l0aF9zdW0oYmxvY2ssIFMpOwoKICAgICAgICAgICAgLy8gMikgU3VidHJhY3QgdGhvc2UgdGhhdCBORVZFUiBoaXQgWCAoaS5lLiwgYWxsIGVsZW1lbnRzIDwgWCkKICAgICAgICAgICAgLy8gICAgc3BsaXQgYGJsb2NrYCBvbiBwb3NpdGlvbnMgd2hlcmUgYmxvY2tba10gPT0gWAogICAgICAgICAgICBsbCBub1hfY291bnQgPSAwOwogICAgICAgICAgICBpbnQgayA9IDAsIEIgPSBibG9jay5zaXplKCk7CiAgICAgICAgICAgIHdoaWxlIChrIDwgQikgewogICAgICAgICAgICAgICAgaWYgKGJsb2NrW2tdID09IFgpIHsKICAgICAgICAgICAgICAgICAgICBrKys7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbnQgbCA9IGs7CiAgICAgICAgICAgICAgICB2ZWN0b3I8bGw+IHN1YjsKICAgICAgICAgICAgICAgIHdoaWxlIChsIDwgQiAmJiBibG9ja1tsXSAhPSBYKSB7CiAgICAgICAgICAgICAgICAgICAgc3ViLnB1c2hfYmFjayhibG9ja1tsXSk7CiAgICAgICAgICAgICAgICAgICAgbCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbm9YX2NvdW50ICs9IGNvdW50X3N1YmFycmF5c193aXRoX3N1bShzdWIsIFMpOwogICAgICAgICAgICAgICAgayA9IGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGFuc3dlciArPSAodG90YWxfaW5fYmxvY2sgLSBub1hfY291bnQpOwogICAgICAgICAgICBpID0gajsgIC8vIG1vdmUgcGFzdCB0aGlzIGJsb2NrCiAgICAgICAgfQoKICAgICAgICBjb3V0IDw8IGFuc3dlciA8PCAiXG4iOwogICAgfQogICAgcmV0dXJuIDA7Cn0K
OQoxIDAgMAowCjEgLTIgLTEKLTIKMyAtMSAtMQotMSAxIC0xCjYgLTMgLTIKLTEgLTEgLTEgLTIgLTEgLTEKOCAzIDIKMiAyIC0xIC0yIDMgLTEgMiAyCjkgNiAzCjEgMiAzIDEgMiAzIDEgMiAzCjEzIDcgMwowIC0xIDMgMyAzIC0yIDEgMiAyIDMgLTEgMCAzCjIgLTIgLTEKLTIgLTEKMiAtMiAtMQotMSAtMgo=
9
1 0 0
0
1 -2 -1
-2
3 -1 -1
-1 1 -1
6 -3 -2
-1 -1 -1 -2 -1 -1
8 3 2
2 2 -1 -2 3 -1 2 2
9 6 3
1 2 3 1 2 3 1 2 3
13 7 3
0 -1 3 3 3 -2 1 2 2 3 -1 0 3
2 -2 -1
-2 -1
2 -2 -1
-1 -2