#include<bits/stdc++.h>
#define int long long
using namespace std;
const int orz=1e9+7;
int a[100009],s[100009];
int poworz(int q,int w){
	if(w==0)return 1;
	if(w==1)return q;
	if(w==2)return q*q%orz;
	return poworz(poworz(q,w/2),2)*poworz(q,w%2)%orz;
}
signed main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	int t,n,m,v,c,d;
	cin>>t;
	for(int qwq=1;qwq<=t;qwq++){
		int b=1;
		scanf("%lld%lld%lld",&n,&m,&v);
		for(int i=1;i<=n;i++){
			a[i]=0;
		}
		for(int i=1;i<=m;i++){
			scanf("%lld%lld",&c,&d);
			if(a[c]!=d&&a[c]!=0){
				puts("0");
				b=0;
				break;
			}
			a[c]=d;
		}
		if(b==0)continue;
		if(n>=20){
			printf("%lld\n",poworz(((v-1)*v+1)%orz,n-1));
		}else{
			int u,v,ans=0;
			for(int i=0;i<(1<<(n-1));i++){
				for(int j=0;j<(1<<(n-1));j++){
					u=i;
					v=j;
					b=1;
					for(int k=1;k<=n;k++){
						s[k]=a[k];
					}
					for(int k=1;k<=n-1;k++){
						if(s[k]==u%2+1){
							if(s[k+1]!=v%2+1&&s[k+1]!=0){
								b=0;
								break;
							}
							s[k+1]=v%2+1;
						}
						u>>=1;
						v>>=1;
					}
					ans+=b;
					if(ans==orz)ans=0;
				}
			}
			printf("%lld\n",ans);
		}
	}
	return 0;
}
