#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
	int c,d;
}p[100005];
const int mod=1e9+7;
int T,n,m,v;
int ans;
inline bool cmp(node a,node b){
	return a.c<b.c;
}
inline int ksm(int a,int b){
	int tmp=1;
	while(b){
		if(b&1)tmp=tmp*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return tmp;
}

signed main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>T;
	while(T--){
		cin>>n>>m>>v;
		int fst=0;
		bool flag=1,flag2=1,flag3=0;
		for(int i=1;i<=m;i++){
			cin>>p[i].c>>p[i].d;
			if(p[i].d!=1)flag2=0;
		}
		sort(p+1,p+m+1,cmp);
		fst=p[1].c;
		for(int i=1;i<m;i++){
			if(p[i].c==p[i+1].c&&p[i].d!=p[i+1].d){
				flag=0;
				break;
			}
			if(p[i].c==n)flag3=1;
		}
		if(!flag){
			cout<<"0\n";
			continue;
		}
		if(m==1){
			cout<<ksm(v*v%mod,n-1)<<'\n';
			continue;
		}
//		if(flag2){
//			
//			continue;
//		}
//		if(n<=12&&m<=12&&v==2){
			ans=ksm(v*v%mod,fst-1);
			for(int i=1;i<m;i++){
				if(p[i].c==p[i+1].c)continue;
				int tmp=(v*(v-1)+1)%mod,k=p[i+1].c-p[i].c-1;
				for(int i=1;i<=k;i++)tmp=tmp*(tmp-1)%mod;
				ans*=tmp;
			}
			ans=ans*ksm(v*v%mod,n-p[m].c+flag3)%mod;
			cout<<ans<<'\n';
			continue;
//		}
		if(n==m){
			
			continue;
		}
	}
	return 0;
}

