import java.util.*;
import java.lang.*;
import java.io.*;
class Codechef
{
{
// your code goes here
Scanner sc
=new Scanner
(System.
in); int t=sc.nextInt();
while(t-->0){
int n=sc.nextInt();
int k=sc.nextInt();
int l=sc.nextInt();
int r=sc.nextInt();
int [] arr=new int [n+1];
for(int i=1;i<=n;i++){
arr[i]=sc.nextInt();
}
long countk = countU(arr, k, l) - countU(arr, k, r + 1);
long countk1 = countU(arr, k + 1, l) - countU(arr, k + 1, r + 1);
long ans = countk - countk1;
}
sc.close();
}
public static int solve(int [] arr, int k, int l, int r){
HashSet<Integer> set=new HashSet<>();
int n=arr.length;
int total=0;
int cnt=0;
int j=1;
for(int i=1;i<n;i++){
while (j < n && cnt < k) {
if (!set.contains(arr[j])) cnt++;
j++;
}
if(cnt>=k){
total+= (n - (j - 1));
}
cnt--;
}
return total;
}
public static int countU(int [] arr, int k,int u){
int n=arr.length;
int total=0;
for (int i = 1; i < n; i++) {
Map
<Integer, Integer
> freq
= new HashMap
<>(); int j = i, distinct = 0, len = 0;
while (j < n && (len < u || distinct < k)) {
freq.put(arr[j], freq.getOrDefault(arr[j], 0) + 1);
if (freq.get(arr[j]) == 1) distinct++;
j++;
len = j - i;
}
if (len >= u && distinct >= k) {
total+=n-j+1;
}
}
return total;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBDb2RlY2hlZgp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgkJU2Nhbm5lciBzYz1uZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwoJCWludCB0PXNjLm5leHRJbnQoKTsKCQl3aGlsZSh0LS0+MCl7CgkJICAgIGludCBuPXNjLm5leHRJbnQoKTsKCQkgICAgaW50IGs9c2MubmV4dEludCgpOwoJCSAgICBpbnQgbD1zYy5uZXh0SW50KCk7CgkJICAgIGludCByPXNjLm5leHRJbnQoKTsKCQkgICAgCgkJICAgIGludCBbXSBhcnI9bmV3IGludCBbbisxXTsKCQkgICAgZm9yKGludCBpPTE7aTw9bjtpKyspewoJCSAgICAgICAgYXJyW2ldPXNjLm5leHRJbnQoKTsKCQkgICAgfQoJCSAgICBsb25nIGNvdW50ayA9IGNvdW50VShhcnIsIGssIGwpIC0gY291bnRVKGFyciwgaywgciArIDEpOwogICAgICAgICAgICBsb25nIGNvdW50azEgPSBjb3VudFUoYXJyLCBrICsgMSwgbCkgLSBjb3VudFUoYXJyLCBrICsgMSwgciArIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgbG9uZyBhbnMgPSBjb3VudGsgLSBjb3VudGsxOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYW5zKTsKCQkgICAgCgkJfQoJCXNjLmNsb3NlKCk7CgoJfQoJCglwdWJsaWMgc3RhdGljIGludCBzb2x2ZShpbnQgW10gYXJyLCBpbnQgaywgaW50IGwsIGludCByKXsKCSAgICBIYXNoU2V0PEludGVnZXI+IHNldD1uZXcgSGFzaFNldDw+KCk7CgkgICAgaW50IG49YXJyLmxlbmd0aDsKCSAgICBpbnQgdG90YWw9MDsKCSAgICBpbnQgY250PTA7CgkgICAgaW50IGo9MTsKCSAgICAKCSAgICBmb3IoaW50IGk9MTtpPG47aSsrKXsKCSAgICAgICAgd2hpbGUgKGogPCBuICYmIGNudCA8IGspIHsKCSAgICAgICAgICAgIGlmICghc2V0LmNvbnRhaW5zKGFycltqXSkpIGNudCsrOwoJICAgICAgICAgICAgaisrOwoJICAgICAgICB9CgkgICAgICAgIGlmKGNudD49ayl7CgkgICAgICAgICAgICB0b3RhbCs9IChuIC0gKGogLSAxKSk7CgkgICAgICAgIH0KCSAgICAgICAgY250LS07CgkgICAgfQoJICAgIHJldHVybiB0b3RhbDsKCX0KCQoJcHVibGljIHN0YXRpYyBpbnQgY291bnRVKGludCBbXSBhcnIsIGludCBrLGludCB1KXsKCSAgICBpbnQgbj1hcnIubGVuZ3RoOwoJICAgIGludCB0b3RhbD0wOwoJICAgIAoJICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBmcmVxID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgICAgICBpbnQgaiA9IGksIGRpc3RpbmN0ID0gMCwgbGVuID0gMDsKCiAgICAgICAgICAgIHdoaWxlIChqIDwgbiAmJiAobGVuIDwgdSB8fCBkaXN0aW5jdCA8IGspKSB7CiAgICAgICAgICAgICAgICBmcmVxLnB1dChhcnJbal0sIGZyZXEuZ2V0T3JEZWZhdWx0KGFycltqXSwgMCkgKyAxKTsKICAgICAgICAgICAgICAgIGlmIChmcmVxLmdldChhcnJbal0pID09IDEpIGRpc3RpbmN0Kys7IAogICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICAgICAgbGVuID0gaiAtIGk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChsZW4gPj0gdSAmJiBkaXN0aW5jdCA+PSBrKSB7CiAgICAgICAgICAgICAgICB0b3RhbCs9bi1qKzE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgkgICAgcmV0dXJuIHRvdGFsOwoJfQoJCn0K