#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define lb lower_bound
#define up upper_bound
#define vll vector<ll>
#define G vector<vll >
#define gg vector<int>
#define F first
#define S second
#define pll pair<ll,ll>
#define pii pair<int,int>
#define RFOR(i,a,b) for(int i=a;i>=b;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define endl '\n'
#define clr(a) memset(a,0,sizeof(a))
#define all(x) x.begin(),x.end()
#define rll read_ll();
#define gc getchar
#define pc putchar
typedef long long ll;
template<class T> inline T lcm(T a,T b){
return a/gcd(a,b)*b;
}
template<typename T>
void debug(T first) {
cout << first << "\n";
}
template<typename T, typename... Args>
void debug(T first, Args... args) {
cout << first << " ";
debug(args...);
}
int inv(int a, int b){
return 1<a ? b - inv(b%a,a)*b/a : 1;
}
ll read_ll(){char c=gc();while((c<'0'||c>'9')&&c!='-')c=gc();ll ret=0;int neg=0;if(c=='-')neg=1,c=gc();while(c>='0'&&c<='9'){ret=10*ret+c-48;c=gc();}return neg?-ret:ret;}
void solve()
{
ll n,m,k,answer = 0;
n = rll m = rll k = rll
vector<ll>A(n),product(n),zeroes;
zeroes.pb(-1);
FOR(i,0,n-1)
{
cin>>A[i];
if(A[i]%m == 0)
zeroes.pb(i);
A[i]%=m;
}
zeroes.pb(A.size());
product[0] = A[0];
FOR(i,1,n-1)
{
if(product[i-1] == 0) product[i] = A[i];
else
product[i] = (A[i]*product[i-1])%m;
}
unordered_map<ll,ll>hash;
FOR(i,0,n-1)
{
if(product[i] == 0)
{
hash.clear();
continue;
}
if(product[i] == k)
answer++;
if(hash.find(product[i]) != hash.end())
answer += hash[product[i]];
auto insert = (product[i]*k)%m;
if(hash.find(insert) != hash.end())
hash[insert] += 1;
else hash.insert({insert,1});
}
if(k==0)
{
for(int j=1;j<zeroes.size()-1;j++)
{
answer+= (zeroes[j]+1)*(zeroes[j+1]-zeroes[j]);
}
}
cout<<answer<<endl;
}
int main()
{
// cout<<inv(2,3)<<endl;
int t;cin>>t;
while(t--)
{
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbGIgbG93ZXJfYm91bmQKI2RlZmluZSB1cCB1cHBlcl9ib3VuZAojZGVmaW5lIHZsbCB2ZWN0b3I8bGw+CiNkZWZpbmUgRyB2ZWN0b3I8dmxsID4KI2RlZmluZSBnZyB2ZWN0b3I8aW50PgojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIHBsbCBwYWlyPGxsLGxsPgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgUkZPUihpLGEsYikgZm9yKGludCBpPWE7aT49YjtpLS0pCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9YTtpPD1iO2krKykKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBjbHIoYSkgbWVtc2V0KGEsMCxzaXplb2YoYSkpCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgcmxsIHJlYWRfbGwoKTsKI2RlZmluZSBnYyBnZXRjaGFyCiNkZWZpbmUgcGMgcHV0Y2hhcgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIFQgbGNtKFQgYSxUIGIpewogICAgICAgIHJldHVybiBhL2djZChhLGIpKmI7Cn0KdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBkZWJ1ZyhUIGZpcnN0KSB7CiAgICBjb3V0IDw8IGZpcnN0IDw8ICJcbiI7Cn0KdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4Kdm9pZCBkZWJ1ZyhUIGZpcnN0LCBBcmdzLi4uIGFyZ3MpIHsKICAgIGNvdXQgPDwgZmlyc3QgPDwgIiAiOwogICAgZGVidWcoYXJncy4uLik7Cn0KaW50IGludihpbnQgYSwgaW50IGIpewogcmV0dXJuIDE8YSA/IGIgLSBpbnYoYiVhLGEpKmIvYSA6IDE7Cn0KCmxsIHJlYWRfbGwoKXtjaGFyIGM9Z2MoKTt3aGlsZSgoYzwnMCd8fGM+JzknKSYmYyE9Jy0nKWM9Z2MoKTtsbCByZXQ9MDtpbnQgbmVnPTA7aWYoYz09Jy0nKW5lZz0xLGM9Z2MoKTt3aGlsZShjPj0nMCcmJmM8PSc5Jyl7cmV0PTEwKnJldCtjLTQ4O2M9Z2MoKTt9cmV0dXJuIG5lZz8tcmV0OnJldDt9Cgp2b2lkIHNvbHZlKCkKewogICAgbGwgbixtLGssYW5zd2VyID0gMDsKICAgIG4gPSBybGwgbSA9IHJsbCBrID0gcmxsCiAgICAKICAgIHZlY3RvcjxsbD5BKG4pLHByb2R1Y3QobiksemVyb2VzOwogICAgemVyb2VzLnBiKC0xKTsKICAgIEZPUihpLDAsbi0xKQogICAgewogICAgICAgIGNpbj4+QVtpXTsKICAgICAgICBpZihBW2ldJW0gPT0gMCkKICAgICAgICAgICAgemVyb2VzLnBiKGkpOwogICAgICAgIEFbaV0lPW07CiAgICB9CiAgICB6ZXJvZXMucGIoQS5zaXplKCkpOwogICAgcHJvZHVjdFswXSA9IEFbMF07CiAgICBGT1IoaSwxLG4tMSkKICAgIHsKICAgICAgICBpZihwcm9kdWN0W2ktMV0gPT0gMCkgcHJvZHVjdFtpXSA9IEFbaV07CiAgICAgICAgZWxzZSAKICAgICAgICBwcm9kdWN0W2ldID0gKEFbaV0qcHJvZHVjdFtpLTFdKSVtOwogICAgfQogICAgCiAgICB1bm9yZGVyZWRfbWFwPGxsLGxsPmhhc2g7CiAgICBGT1IoaSwwLG4tMSkKICAgIHsKICAgICAgICBpZihwcm9kdWN0W2ldID09IDApCiAgICAgICAgewogICAgICAgICAgICBoYXNoLmNsZWFyKCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZihwcm9kdWN0W2ldID09IGspCiAgICAgICAgICAgIGFuc3dlcisrOwogICAgICAgIGlmKGhhc2guZmluZChwcm9kdWN0W2ldKSAhPSBoYXNoLmVuZCgpKQogICAgICAgICAgICBhbnN3ZXIgKz0gaGFzaFtwcm9kdWN0W2ldXTsKICAgICAgICBhdXRvIGluc2VydCA9IChwcm9kdWN0W2ldKmspJW07CiAgICAgICAgaWYoaGFzaC5maW5kKGluc2VydCkgIT0gaGFzaC5lbmQoKSkKICAgICAgICAgICAgaGFzaFtpbnNlcnRdICs9IDE7CiAgICAgICAgZWxzZSBoYXNoLmluc2VydCh7aW5zZXJ0LDF9KTsKICAgIH0KICAgIAogICAgaWYoaz09MCkKICAgIHsKICAgICAgICBmb3IoaW50IGo9MTtqPHplcm9lcy5zaXplKCktMTtqKyspCiAgICAgICAgewogICAgICAgICAgICBhbnN3ZXIrPSAoemVyb2VzW2pdKzEpKih6ZXJvZXNbaisxXS16ZXJvZXNbal0pOwogICAgICAgIH0KICAgIH0KICAgIAogICAgY291dDw8YW5zd2VyPDxlbmRsOwp9CgppbnQgbWFpbigpCnsKICAgIC8vIGNvdXQ8PGludigyLDMpPDxlbmRsOwogICAgaW50IHQ7Y2luPj50OwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIHNvbHZlKCk7CiAgICB9CiAgIHJldHVybiAwOwp9