#include<bits/stdc++.h>
using namespace std;
int T;

struct x{
	int pos;
	int vl;
}f[1001000];
bool cmp(x xx,x yy){
	return xx.pos<yy.pos;
}
long long mo=1e9+7;
bool bj[1001000];
void work(){
	int m,n;
	long long v;
	cin>>m>>n>>v;
	long long ans=1;
	bool pd_A=true;
	if(m!=n)pd_A=false;
	memset(bj,0,sizeof(bj));
	for(int i=1;i<=n;i++){
		cin>>f[i].pos>>f[i].vl;
		bj[f[i].pos]=true;
	}
	if(pd_A){
		for(int i=1;i<=n-1;i++){
			ans*=((v*v-v+1)%mo);
			ans%=mo;
		}
		printf("%d\n",ans);
		return;
	}
	if(n==1){
		for(int i=1;i<=n-1;i++){
			ans*=((v*v)%mo);
			ans%=mo;
		}
		printf("%d\n",ans);
		return;
	}
	if(v==1){
		printf("1\n");
		return;
	}
	//sort(f+1,f+n+1,cmp);
	for(int i=1;i<=n-1;i++){
		if(bj[i]&&bj[i+1]){
			ans*=((v*v-v+1)%mo);
		}else{
			ans*=((v*v)%mo);
		}
	}
	printf("%d\n",ans);
	return;
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	cin>>T;
	while(T--){
		work();
	}	
} 
