#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
int T,n,m,v;
int qpow(int x,int y){
	int res=1;
	while(y){
		if(y&1) res=res*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return res;
}
struct node{
	int id,val;
}a[100001];
bool cmp(node x,node y){
	if(x.id==y.id) return x.val<y.val;
	return x.id<y.id;
}
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;
		for(int i=1;i<=m;i++){
			cin>>a[i].id>>a[i].val;
		}
		sort(a+1,a+m+1,cmp);
		bool flag=1;
		for(int i=1;i<m;i++){
			if(a[i].id==a[i+1].id&&a[i].val!=a[i+1].val){
				flag=0;
				break;
			}
		}
		if(!flag){
			cout<<0<<"\n";
			continue;
		}
		int cnt=n-1,ans=qpow(v*v%mod,(a[1].id-1)+(n-a[m].id));
		for(int i=1;i<m;i++){
			if(a[i].id!=a[i+1].id){
				int now=qpow(v*v%mod,a[i+1].id-a[i].id);
				now=(now-qpow(v,a[i+1].id-a[i].id)+qpow(v,a[i+1].id-a[i].id-1)+mod)%mod;
//				cout<<now<<"\n";
				ans=ans*now%mod;
			}
		}
		cout<<ans<<"\n";
	}
}
