#include <bits/stdc++.h>
#define int long long 
using namespace std;
const int N=1e6+5,mod=1000000007;
int T,n,m,v,t1,t2,sta[N],tp,ch4;
map<int,int>mp;
int qp(int x,int y){
	int ans=1;
	x%=mod;
	while(y){
		if(y&1)ans=(ans*x)%mod;
		x=(x*x)%mod;
		y/=2;
	}
	return ans;
}
void ops()
{
	for(int i=1;i<=tp;i++)cout<<sta[i]<<" ";
	cout<<"\n";
}
signed main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	scanf("%lld",&T);
	
	for(int ii=1;ii<=T;ii++){
		scanf("%lld %lld %lld",&n,&m,&v);
		int cnt1,cnt2=cnt1=0;
		mp.clear();
		ch4=0;
		tp=0;
		for(int i=1;i<=m;i++)sta[i]=0;
		for(int i=1;i<=m;i++){
			scanf("%lld %lld",&t1,&t2);
			if(!mp[t1]){
				sta[++tp]=t1;
				mp[t1]=t2;
			}else{
				if(mp[t1]!=t2){
					printf("0\n");
					++ch4;
					break;
				}
			}
		}
//		if(ii==)
		
		if(ch4)continue;
		sort(sta+1,sta+1+tp);
//		ops();
		for(int i=2;i<=tp;i++){
			if(abs(sta[i]-sta[i-1])==1)++cnt1;
			else ++cnt2;
		}
		long long an=1;
//		cout<<cnt1<<"\n";
		an=(((qp((v-1)*v+1,cnt1)*qp(v*v,(n-1-cnt1-cnt2)))%mod)*qp((v-1)*v+1,cnt2))%mod;
		printf("%lld\n",an);
//		cout<<(qp(2,8)*qp(3,5))%mod;
	}
	
	
	
	
	
	return 0;
} 
