#include<bits/stdc++.h>
using namespace std;
const int P=1e9+7;
long long fp(long long a,long long b){//fast_pow
	long long c=1;
	a%=P;
	while(b){
		if(b%2==1){
			c*=a;
			c%=P;
		}
		b>>=1;
		a*=a;
		a%=P;
	}
	return c%P;
}
//计算 a^b 
int s[1000006];

int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	int t;
	cin>>t;
	long long n,m;
	long long v;
	while(t--){
		memset(s,0,sizeof(s));
		scanf("%d %d %lld",&n,&m,&v);
		
		if(m==1){
			int x,y;
			cin>>x>>y;
			cout<<fp(v*v,n-1)<<'\n';
			continue;
		}
		
		long long tot=0;
		bool op=false;
		bool boom=false;
		
		for(int i=1,x,y;i<=m;i++){
			scanf("%d %d",&x,&y);
			if(x>1000005) {
				boom=true;
				continue;
			}
			if(!s[x]) {
				s[x]=y;
				tot++;
			}
			else if(s[x]&&s[x]!=y) {
				op=true;
			}
		}
		if(op||boom){
			puts("0");
			continue;
		}
		
		if(tot==1){
			cout<<fp(v*v,n-1)<<'\n';
			continue;
		}
		
		else if(tot==n){
			cout<<fp((v*v-v)%P+1,n-1)<<'\n';
			continue;
		} 
		
		long long ans=1;
		for(int i=1;i<n;i++){
			if(s[i]&&s[i+1]) ans*=((v*(v-1)+1)%P);
			else ans*=(v*v)%P;
			ans%=P;
		}
		printf("%lld\n",ans);
	}
	return 0;
}
//我靠考场里有人**摔伤**了，tql ,必须写进邮寄里 10:08
//性质好难写QAQ 
//小恐龙真好玩(乐
