#include<bits/stdc++.h>
#define mod 1000000007
#define ll long long
using namespace std;
const int N=1e6+5,M=1e5+5;
int T;
int n,m;
ll v;
ll ans;
int c[M],d[M];
struct mtx{
	ll num[2][2];
}f,g,zero,t,one;
void sort_(int i,int j){
	int l=i,r=j;
	int mid=c[(i+j)/2];
	while(i<=j){
		while(c[i]<mid) i++;
		while(c[j]>mid) j--;
		if(i<=j){
			swap(c[i],c[j]);
			swap(d[i],d[j]);
			i++; j--;
		}
	}
	if(l<j) sort_(l,j);
	if(i<r) sort_(i,r);
	return;
}
mtx operator *(mtx x,mtx y){
	mtx z=zero;
	for(int i=0; i<=1; i++){
		for(int j=0; j<=1; j++){
			for(int k=0; k<=1; k++){
				z.num[i][j]=(z.num[i][j]+x.num[i][k]*y.num[k][j])%mod;
			}
		}
	}
	return z;
}
mtx power(mtx x,int y){
	mtx res=one;
	while(y){
		if(y%2==1){
			res=res*x;
		}
		x=x*x;
		y/=2;
	}
	return res;
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	scanf("%d",&T);
	one.num[0][0]=1;
	one.num[1][1]=1;
	while(T--){
		f=zero;
		g=zero;
			
		scanf("%d%d%lld",&n,&m,&v);
		
		t.num[0][0]=v%mod*v%mod;
		t.num[0][1]=0;
		t.num[1][0]=v*v%mod*(v-1)%mod;
		t.num[1][1]=v%mod;
		
		for(int i=1; i<=m; i++){
			scanf("%d%d",&c[i],&d[i]);
		}
		sort_(1,m);
		int flg=0;
		for(int i=1; i<=m; i++){
			if(c[i]==c[i+1]&&d[i]!=d[i+1]){
				flg=1;
				break;
			}
		}
		if(flg==1){
			printf("0\n");
			continue;
		}
		
		g.num[0][0]=1;
 		for(int i=1; i<=m; i++){
//				f[i][1]=f[i-1][1]*v%mod;
//				f[i][0]=(f[i][0]+f[i-1][0]*v%mod*v%mod)%mod;
//				f[i][0]=(f[i][0]+f[i-1][1]*v%mod*v%mod*(v-1)%mod)%mod;

//				F=(f[i-1][0]+f[i-1][1])%mod;
//				f[i][1]=F;
//				f[i][0]=F*v%mod*(v-1)%mod;
			if(c[i]==c[i-1]||c[i]==n) continue;
			g=g*power(t,c[i]-c[i-1]-1);
			ll F=0;
			F=(g.num[0][0]+g.num[0][1])%mod;
			f.num[0][1]=F;
			f.num[0][0]=F*v%mod*(v-1)%mod;
			g=f;
			f=zero;
		} 
		int lst=m;
		while(c[lst]==n) lst--;
//		g=g*t;
//		g=g*t;
//		g=g*t;
		g=g*power(t,n-1-c[lst]);
		ans=0;
		if(c[m]!=n){
//			ans=(f[n-1][0]+f[n-1][1]*v%mod)%mod;
			ans=(g.num[0][0]+g.num[0][1]*v%mod)%mod;
		}else{
//			ans=(f[n-1][0]+f[n-1][1])%mod;
			ans=(g.num[0][0]+g.num[0][1])%mod;
		}
		printf("%lld\n",ans); 
	}
	return 0;
}
