#include<bits/stdc++.h>
#define int long long

using namespace std;

int read(){
	int x;
	scanf("%lld",&x);
	return x;
}

void write(int x){
	printf("%lld",x);
}

const int maxn=300005;
const int inf=1e18;
const int mod=1e9+7;

int a[maxn],b[maxn];
int x[maxn];

int n,m,v;

map<int,int> mp;

int ksm(int a,int b){
	int ans=1;
	while(b){
		if(b&1){
			ans=ans*a%mod;
		}
		a=a*a%mod;
		b>>=1;
	}
	return ans;
}

bool flag=1;

bool check(){
	for(int i=1;i<=n-1;i++){
		if(x[i]==a[i]){
			if(x[i+1]!=b[i]) return 0;
		}
	}
	return 1;
}

void dfs3(int dep){
	if(dep>n){
		if(check()){
			// for(int i=1;i<=n-1;i++){
				// cout<<a[i]<<" ";
			// }
			// // cout<<endl;
			// for(int i=1;i<=n-1;i++){
				// cout<<b[i]<<" ";
			// }
			// cout<<endl;
			// for(int i=1;i<=n;i++){
				// cout<<x[i]<<" ";
			// }
			// cout<<endl;
			// cout<<"---------------"<<endl;
			flag=1;
		}
		return ;
	}
	if(x[dep]!=0){
		dfs3(dep+1);
	}
	else{
		for(int i=1;i<=2;i++){
			x[dep]=i;
			dfs3(dep+1);
			x[dep]=0;
		}
	}
}

int anss=0;

void dfs2(int dep){
	if(dep>n-1){
		flag=0;
		dfs3(1);
		if(flag==1){
			anss++;
		}
		return ;
	}
	for(int i=1;i<=2;i++){
		b[dep]=i;
		dfs2(dep+1);
		b[dep]=0;
	}
}

void dfs(int dep){
	if(dep>n-1){
		dfs2(1);
		return ;
	}
	for(int i=1;i<=2;i++){
		a[dep]=i;
		dfs(dep+1);
		a[dep]=0;
	}
}

namespace sub1{
	bool check(){
		for(int i=1;i<=n;i++){
			if(x[i]==0){
				return 0;
			}
		}
		return 1;
	}
	int dp[maxn][2];
	void solve(){
		dp[0][0]=1;
		dp[0][1]=0;
		for(int i=1;i<=n-1;i++){
			dp[i][0]=(dp[i-1][0]+dp[i-1][1])*(v-1)%mod*v%mod;
			dp[i][1]=(dp[i-1][0]+dp[i-1][1]);
		}
		write((dp[n-1][0]+dp[n-1][1])%mod);
		puts("");
		return ;
	}
}

void solve(){
	n=read(),m=read(),v=read();
	for(int i=1;i<=n;i++){
		x[i]=0;
	}
	mp.clear();
	for(int i=1;i<=m;i++){
		int c=read(),w=read();
		if(mp[c]!=w&&mp[c]!=0){
			puts("0");
			return ;
		}
		mp[c]=w;
		x[c]=w;
	}
	if(m==n&&sub1::check()){
		sub1::solve();
		return ;
	}
	else if(n<=12&&m<=12){
		anss=0;
		for(int i=1;i<=n;i++){
			a[i]=0;
			b[i]=0;
		}
		dfs(1);
		write(anss),puts("");
		return ;
	}
	else{
		int ans=0;
		for(int i=1;i<=n-1;i++){
			ans=(ans+v*v%mod);		
		}
		ans=(ans+((v-1)*v)%mod+v)%mod;
		write(ans);
		puts("");
	}
	return ;
}

signed main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	int T=1;
	T=read();
	while(T--){
		solve();
	}
	return 0;
}

