#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+5;
const ll mod=1e9+7;
int t;
ll ksm(ll a,ll b){
	ll x=1;
	while(b){
		if(b&1)b^=1,x*=a,x%=mod;
		else b>>=1,a*=a,a%=mod;
	}
	return x;
}
//int nexz[N];
ll n,m,v;
ll c[N],d[N];
int arr[N];
int a[N],b[N];
int nn;
bool check(int x,int y){
	int tarr[13];
	for(int i=1;i<=n;i++){
		tarr[i]=0;
	}
	for(int i=1;i<=m;i++){
		tarr[c[i]]=d[i];
	}
	for(int i=0;i<nn;i++){
		if(x & (1<<i))a[i+1]=2;
		else a[i+1]=1;
		if(y & (1<<i))b[i+1]=2;
		else b[i+1]=1;
	}
//	for(int i=1;i<n;i++){
//		cout<<a[i]<<" "<<b[i]<<"\n";
//	}
	//cout<<"\n\n";
	for(int i=1;i<n;i++){
		if(tarr[i]==a[i]){
			if(tarr[i+1]!=b[i]  && tarr[i+1])return false;
			else tarr[i+1]=b[i];
		}
	}
	return true;
}
int tt[N];
int ttj;
ll dp[N];

int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	cin >>t;
	while(t--){
		bool fzero=0;
		cin >> n >> m >>v;
		ttj=0;
		for(int i=1;i<=n;i++)tt[i]=0;
		for(int i=1;i<=m;i++){
			cin>>c[i]>>d[i];
			if(tt[c[i]]!=d[i] && tt[c[i]])fzero=1;
			if(tt[c[i]]==0)ttj++;
			tt[c[i]]=d[i];
		}
		if(fzero){
			cout<<0<<"\n";
			continue;
		}
		if(m==1){
			cout<<ksm(v,2*n-2)<<"\n";
			continue;
		}
		if(n <=12 && m<=12){
			int cnt=0;
			for(int i=1;i<=m;i++){
				arr[c[i]]=d[i];
			}
			nn=n-1;
			for(int i=0;i<(1<<nn);i++){
				for(int j=0;j<(1<<nn);j++){
					if(check(i,j))cnt++;
				}
			}
			cout<<cnt<<"\n";
			continue;
		}
//		dp[0]=1;
//		if(m==n && ttj==n){
//			cout<<"fs";
//			for(int i=1;i<n;i++){
//				dp[i]=((dp[i-1]*(v-1)%mod)*v+1)%mod;
//				//dp[i]
//				cout<<dp[i]<<" ";
//			}
//			//cout<<dp[n-1]<<"\n";
//		}
		//dp[0]=1;
		
//		for(int i=1;i<=n;i++){
//			tt[i]
//		}
		//cout<<cnt<<"\n";
	}
	return 0;
}
