#include <iostream>
using namespace std;
const int MAXN = 100005;
long long f[MAXN];
long long cum[MAXN];
int n,m,x;
long long ans = 0;
void pre(){
for(int i = 0; i<MAXN; i++){
f[i] = cum[i] = 0;
}
}
void post(){
cum[0] = f[0];
for(int i = 1; i<MAXN; i++){
cum[i] = cum[i-1] + f[i];
}
}
void solve(){
cin>>n>>m>>x;
pre();
int t;
for(int i = 0; i<n; i++){
cin>>t;
f[t%m]++;
}
post();
ans = 0;
for(int i = 0; i<m; i++){
int z0 = (m - i)%m;
int zx = (x - i + m)%m;
if(z0<=zx){
ans += f[i]*(cum[zx] - cum[z0]+f[z0]);
}else{
ans += f[i]*(cum[m-1] - cum[z0] + f[z0] + cum[zx]);
}
}
cout<<ans<<endl;
}
int main() {
int t;
cin>>t;
while(t--) solve();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1BWE4gPSAxMDAwMDU7Cgpsb25nIGxvbmcgZltNQVhOXTsKbG9uZyBsb25nIGN1bVtNQVhOXTsKaW50IG4sbSx4Owpsb25nIGxvbmcgYW5zID0gMDsKCnZvaWQgcHJlKCl7Cglmb3IoaW50IGkgPSAwOyBpPE1BWE47IGkrKyl7CgkJZltpXSA9IGN1bVtpXSA9IDA7Cgl9Cn0KCnZvaWQgcG9zdCgpewoJY3VtWzBdID0gZlswXTsKCWZvcihpbnQgaSA9IDE7IGk8TUFYTjsgaSsrKXsKCQljdW1baV0gPSBjdW1baS0xXSArIGZbaV07Cgl9Cn0KCnZvaWQgc29sdmUoKXsKCWNpbj4+bj4+bT4+eDsKCXByZSgpOwoJaW50IHQ7Cglmb3IoaW50IGkgPSAwOyBpPG47IGkrKyl7CgkJY2luPj50OwoJCWZbdCVtXSsrOwoJfQoJcG9zdCgpOwoJYW5zID0gMDsKCWZvcihpbnQgaSA9IDA7IGk8bTsgaSsrKXsKCQlpbnQgejAgPSAobSAtIGkpJW07CgkJaW50IHp4ID0gKHggLSBpICsgbSklbTsKCQlpZih6MDw9engpewoJCQlhbnMgKz0gZltpXSooY3VtW3p4XSAtIGN1bVt6MF0rZlt6MF0pOwoJCX1lbHNlewoJCQlhbnMgKz0gZltpXSooY3VtW20tMV0gLSBjdW1bejBdICsgZlt6MF0gKyBjdW1benhdKTsKCQl9Cgl9CgkKCWNvdXQ8PGFuczw8ZW5kbDsKfQoKaW50IG1haW4oKSB7CglpbnQgdDsKCWNpbj4+dDsKCXdoaWxlKHQtLSkgc29sdmUoKTsKCXJldHVybiAwOwp9