#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int T,n,m,v;
vector<int>p;
map<int,int>mp;
int qpow(int a,int b){
	int ans=1;
	if(b<0)return 1;
	while(b){
		if(b&1)(ans*=a)%=mod;
		(a*=a)%=mod;
		b>>=1;
	}
	return ans;
}
signed main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>T;
	while(T--){
		p.clear();
		mp.clear();
		cin>>n>>m>>v;
		int lst=1,ans=1;
		for(int i=1;i<=m;i++){
			int x,y;
			cin>>x>>y;
			if(mp[x]&&mp[x]!=y)ans=0;
			if(!mp[x])p.push_back(x);
			mp[x]=y;
		}
		sort(p.begin(),p.end());
		lst=p[0];
		for(int x:p){
			if(x==p[0])continue;
			int len=x-lst;
			(ans*=(qpow(v*v%mod,len)-qpow(v,len-1)*(v-1)%mod+mod)%mod)%=mod;
			// if(n==10&&m==11)cout<<x<<' '<<lst(qpow(v*v%mod,len)-qpow(v,len-1)*(v-1)%mod+mod)%mod<<' ';
			lst=x;
		}
		int x=p[p.size()-1];
		if(x!=n){
			int len=n-x;
			(ans*=qpow(v*v%mod,len))%=mod;
		}
		x=p[0];
		if(x!=1){
			int len=x-1;
			(ans*=qpow(v*v%mod,len))%=mod;
		}
		
		cout<<ans<<'\n';
	}
}
/*
10 11 2
7 2
2 2
3 2
4 2
10 2



*/
