#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int>mp;
const int MOD=1e9+7;
int T,n,m,V,a[1000010],f[1000010];
//int powv[1000010];
void upd(int &x,int y){
	x+=y;
	if(x>=MOD)x-=MOD;
}
long long ksm(long long x,long long y){
	long long ans=1;
	while(y){
		if(y&1)ans=ans*x%MOD;
		x=x*x%MOD,y>>=1;
	}
	return ans;
}
int rd(){
	int x=0;char ch=getchar();
	while(ch<'0'||ch>'9')ch=getchar();
	while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return x;
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	T=rd();
	while(T--){
		n=rd(),m=rd(),V=rd();
		int flag=1;
		mp.clear();
		for(int i=1;i<=m;i++){
			f[i]=0;
			int x;
			a[i]=rd(),x=rd();
			if(!mp[a[i]])mp[a[i]]=x;	
			else if(mp[a[i]]!=x)flag=0;
		}
		if(!flag){
			printf("0\n");
			continue;
		}
		sort(a+1,a+1+m);
		long long invv=ksm(V,MOD-2);
		for(int i=1;i<=m;i++){
			if(i==1)f[i]=ksm(V*1ll*V%MOD,a[i]-1);
			else{
				if(a[i]==a[i-1])f[i]=f[i-1];
				else{
					long long gg1=invv;
					long long gg2=ksm(V*1ll*V%MOD,a[i]-a[i-1]-1)*V%MOD;
					long long gg3=ksm(gg1-1,MOD-2);
					long long gg4=ksm(gg1,a[i]-a[i-1]);
					f[i]=f[i-1]*1ll*gg2%MOD*(gg4-1)%MOD*gg3%MOD*(V-1)%MOD;
					upd(f[i],f[i-1]*ksm(V,a[i]-a[i-1]-1)%MOD);	
				}
			}
			if(i==m)f[m]=f[m]*1ll*ksm(V*1ll*V%MOD,n-a[i])%MOD;
		}
		printf("%d\n",f[m]);
	}
}
