#include <bits/stdc++.h>
typedef long long LL;
constexpr LL _MOD=1e9+7;
LL ru(){
	LL ret=0,c=getchar();
	while(c<'0'||c>'9')c=getchar();
	for(;c>='0'&&c<='9';c=getchar()){ret=ret*10+(c&15);}
	return ret;
}

struct VAR{
	int i;
	int v;
}X[100500];
bool cmp(const VAR a,const VAR b){
	return a.i<b.i;
}
LL N,M,V;
LL qpow(LL a,LL p){
	if(p<=1)return p==1?a:1;
	if(p&1){
		LL r=qpow(a,p>>1);
		return r*r%_MOD*a%_MOD;
	}else{
		LL r=qpow(a,p>>1);
		return r*r%_MOD;
	}
}
void ECh(){
	memset(X,-1,sizeof(X));
	N=ru(),M=ru(),V=ru();
	for(int i=1;i<=M;i++){
		X[i].i=ru();
		X[i].v=ru();
	}
	std::sort(X+1,X+M+1,cmp);
	for(int i=2;i<=M;i++){
		if(X[i].i==X[i-1].i&&X[i].v!=X[i-1].v){
			printf("0\n");
			return;
		}
	}
	int l=0;LL ans=1;
	for(int i=1;i<=M;i++){
//		ans*=(X[i].i-l-1)*(v*v%_MOD)%_MOD;ans%=_MOD;
		ans*=qpow((V*V%_MOD),(X[i].i-l-1))%_MOD;ans%=_MOD;
		l=X[i].i;
		if(X[i].i+1==X[i+1].i){
			LL k=0;
			k+=(V-1)*V;
			k+=1*1;
			ans*=(k%_MOD);ans%=_MOD;
		}else{
			if(X[i].i<N)ans*=(V*V%_MOD);ans%=_MOD;
		}
	}
	ans*=qpow((V*V%_MOD),(N-l-1))%_MOD;ans%=_MOD;
	printf("%lld\n",ans%_MOD);
//	std::cerr<<1;
}
int main(){
#ifndef _DEBUG
	freopen("assign.out","w",stdout);
#endif
	freopen("assign.in","r",stdin);
	int T=ru();
	while(T--){
		ECh();
	}
}
