#include<bits/stdc++.h>
#define L long long
using namespace std;
const L N=2e5+10,mod=1e9+7;
struct tj{
	L c,d;
}t[N];
L T,n,m,v;
L qpow(L x,L d){
	L r=1;
	while(d){
		if(d&1) r=r*x%mod;
		x=x*x%mod;
		d>>=1;
	}return r;
}
bool cmp(tj x,tj y){
	return x.c<y.c;
}
L fac[N];
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	
	scanf("%lld",&T);
	while(T--){
		scanf("%lld%lld%lld",&n,&m,&v);
		fac[0]=1;
		for(L i=1;i<N;i++)fac[i]=fac[i-1]*((i+v)%mod)%mod;
		L p=v*v%mod;
		for(L i=1;i<=m;i++) scanf("%lld%lld",&t[i].c,&t[i].d);
		if(n==1){
			printf("1\n");
			continue;
		}
		sort(t+1,t+m+1,cmp);
		L ans=1;
		for(L i=1;i<=m;i++){
			if(i==1){
				ans=ans*qpow(p,t[i].c-1)%mod;
			}
			else{
				if(t[i].c==t[i-1].c){
					if(t[i].d!=t[i-1].d) ans=0;
					else continue;
				}
				else{
					if(t[i].c-t[i-1].c==1) ans=ans*((p-v+1+mod)%mod)%mod;
					else ans=ans*fac[t[i].c-t[i-1].c]%mod*(v-1)%mod;
				}
			}
		}
		if(t[m].c!=n) ans=ans*qpow(p,n-t[m].c)%mod;
		printf("%lld\n",ans);
	}
	return 0;
}
