#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
typedef long long ll;
ll t,n,m,k,x,z,len;
ll nw;
map<ll,ll>fg;
ll X[100005];
struct qwe{
	ll a[3][3];
}tmp,dp;
qwe mul(qwe a,qwe b){
	for(int i=0;i<2;i++){
		for(int j=0;j<2;j++){
			tmp.a[i][j]=0;
		}
	}
	for(int i=0;i<2;i++){
		for(int j=0;j<2;j++){
			for(int k=0;k<2;k++){
				tmp.a[i][j]=(tmp.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod;
			}
		}
	}
	return tmp;
}
qwe qk_pow(qwe res,int n){
	qwe x;
	x.a[0][0]=k*k%mod;
	x.a[0][1]=0;
	x.a[1][0]=k*(k-1)%mod;
	x.a[1][1]=k;
	while(n){
		if(n&1) res=mul(res,x);
		x=mul(x,x);
		n>>=1;
	}
	return res;
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	scanf("%lld",&t);
	while(t--){
		nw=len=0;
		scanf("%lld%lld%lld",&n,&m,&k);
		fg.clear();
		for(int i=1;i<=m;i++){
			scanf("%lld%lld",&x,&z);
			if(fg[x]!=z&&fg[x]!=0) nw=1;
			fg[x]=z;
			X[++len]=x;
		}
		if(nw){
			printf("0\n"); 
			continue;
		}
		sort(X+1,X+1+len);
		len=unique(X+1,X+1+len)-X-1;
		dp.a[0][0]=1;
		dp.a[0][1]=0;
		if(fg[1]) swap(dp.a[0][0],dp.a[0][1]);
		nw=1;
		for(int i=1;i<=len;i++){
			if(X[i]==1) continue;
			dp=qk_pow(dp,X[i]-1-nw);
			tmp=dp;
			dp.a[0][0]=0;
			dp.a[0][1]=((tmp.a[0][0]*k%mod)*k%mod+tmp.a[0][1]*((k*k-k+1)%mod)%mod)%mod;
			nw=X[i];
		}
		dp=qk_pow(dp,n-nw);
		printf("%lld\n",(dp.a[0][0]+dp.a[0][1]+mod)%mod);
	}
	return 0;
}
