#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
struct sbq{
	int a,b;
}a[200005],b[200005];
long long d[200005];
bool cmp(sbq aa,sbq bb){return aa.a<bb.a;}
long long po(int x,int t){
	int p=1;
	while(t){
		if(t&1) p=p*1ll*x%mod;
		x=x*1ll*x%mod,t>>=1;
	}
	return p;
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	int uuu;scanf("%d",&uuu);
	while(uuu--){
		int n,m,v;scanf("%d%d%d",&n,&m,&v);
		for(int i=1;i<=m;i++) scanf("%d%d",&a[i].a,&a[i].b);
		sort(a+1,a+1+m,cmp);
		bool bj=true;
		int nn=1;b[1]=a[1];
		for(int i=2;i<=m;i++){
			if(a[i].a==b[nn].a&&a[i].b!=b[nn].b){bj=false;break;}
			if(a[i].a!=b[nn].a) b[++nn]=a[i];
		}
		if(!bj){printf("0\n");continue;}
		for(int i=1;i<=m;i++) a[i].a=a[i].b=0;
		m=nn;
		for(int i=1;i<=nn;i++) a[i]=b[i];
		long long ans=po(v,2*(a[1].a-1))*po(v,2*(n-a[m].a))%mod;
		for(int i=1;i<m;i++)
			ans=ans*(po(v,2*(a[i+1].a-a[i].a))-po(v,(a[i+1].a-a[i].a-1))*(v-1)%mod)%mod;
		printf("%lld\n",(ans+mod)%mod);
	}
	return 0;
}
