#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,p=1e9+7;
int t,n,m,v,pos[N];
int qpow(int a,int b) {
	int ans=1;
	while(b) {
		if(b&1) ans=ans*a%p;
		a=a*a%p;
		b>>=1;
	}
	return ans;
}
signed main() {
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(nullptr);
	cin>>t;
	while(t--) {
		cin>>n>>m>>v;
		int tot=0,flag=false;
		unordered_map<int,int> mp;
		for(int i=1; i<=m; i++) {
			int c,d;
			cin>>c>>d;
			if(mp.count(c)&&mp[c]!=d) {
				flag=true;
				break;
			}
			if(!mp.count(c)) pos[++tot]=c;
			mp[c]=d;
		}
		if(flag) {
			cout<<0<<'\n';
			continue;
		}
		sort(pos+1,pos+tot+1);
		int ans=1;
		for(int i=2; i<=tot; i++) {
			int len=pos[i]-pos[i-1];
			int val=(qpow(v,2*len)-qpow(v,len)+qpow(v,len-1)+p)%p;
			ans=ans*val%p;
		}
		cout<<ans*qpow(v*v%p,(n-1)-(pos[tot]-pos[1]))%p<<'\n';
	}
	return 0;
}
