#include<iostream>
using namespace std;
const long long mod=1000000007;
long long c[100005],d[100005],qwq[11],cq,a0[10001][13],b0[10001][15],ca,visa[15],visb[15],num[100005];
unsigned long long qpow(unsigned long long a,unsigned long long b){
	if(b==1) return a%mod;
	if(b==0) return 1;
	unsigned long long s=qpow(a,b/2)%mod;
	if(b%2==0){
		return (s*s)%mod;
	}
	else{
		return ((s*s)%mod*a)%mod;
	}
}
void dfsab(int id,int l){
	if(id==l+1){
		ca++;
		for(int i=1;i<=l;i++) a0[ca][i]=visa[i];
		for(int i=1;i<=l;i++) b0[ca][i]=visb[i];
		return;
	}
	visa[id]=1; visb[id]=1;
	dfsab(id+1,l);
	visa[id]=2; visb[id]=2;
	dfsab(id+1,l);
}
void work(){
	long long n,m,v;
	cin>>n>>m>>v;
	if(m!=1){
		for(int i=1;i<=n;i++) num[i]=0;
	}
	bool f=0;
	for(int i=1;i<=m;i++){
		cin>>c[i]>>d[i];
		if(m==1) continue;
		if(num[c[i]]!=0&&num[c[i]]!=d[i]) f=1;
		num[c[i]]=d[i];
	}
	if(f==1){
		cq++;
		qwq[cq]=0;
		return;
	}
	if(m==1){
		cq++;
		qwq[cq]=qpow(v,2*n-2);
		return;
	}
	else if(n<=12&&m<=12&&v<=2){
		ca=0;
		dfsab(1,n-1);
		int ans=0;
		for(int i=1;i<=ca;i++){
			for(int j=1;j<=ca;j++){
				for(int k=1;k<=n;k++){
					if(num[k]!=0){
						if(k!=1&&num[k-1]==a0[i][k-1]){
							if(num[k]!=b0[j][k-1]&&num[k]!=0) break;
						}
					}
					if(k==n) ans++;
				}
			}
		}
		cq++;
		qwq[cq]=ans;
	}
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	int t;
	cin>>t;
	while(t--){
		work();
	}
	for(int i=1;i<=cq;i++) cout<<qwq[i]<<endl;
	return 0;
}
