// By 0x0F #include<bits/stdc++.h> usingnamespace std; #define int long long inlineintread(){ int x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch > '9') {if (ch == '-') f = -1; ch = getchar();} while (ch >= '0' && ch <= '9') {x = x * 10 + ch - 48; ch = getchar();} return x * f; } int a[200010]; map<pair<int, int>, int> mp; voidsolve(){ int n = read(), x = read(), y = read(); for (int i = 1; i <= n; i++) a[i] = read(); mp.clear(); for (int i = 1; i <= n; i++) mp[{a[i] % x,a[i] % y}]++; int ans=0; for (int i = 1; i <= n; i++) { ans += mp[{(x - a[i] % x) % x, a[i] % y}]; //累加答案 if (a[i] % x == 0) ans--; //当 a_i 为 0 时,自己加自己,自己减自己都可以构成整除,所以减去一个答案 } printf("%lld\n", ans / 2); //每个答案被重复算了一次 } signedmain(){ int t = read(); while (t--) solve(); return0; }