#include<bits/stdc++.h>
using namespace std;
const int N=100010,mod=1000000007;
typedef long long LL;
int T;
pair<LL,LL> pc[N];
LL qmi(LL a,LL b){
	LL res=1;
	while(b){
		if(b&1)res=((res%mod)*(a%mod))%mod;
		a=((a%mod)*(a%mod))%mod;
		b>>=1;
	}
	return res;
}
LL chen(LL a,LL b){
	LL res=0;
	while(b){
		if(b&1)res=((res%mod)+(a%mod))%mod;
		a=((a%mod)+(a%mod))%mod;
		b>>=1;
	}
	return res;
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	cin>>T;
	while(T--){
		LL n,m,v,c[N],d[N];
		cin>>n>>m>>v;
		for(int i=1;i<=m;i++){
			cin>>c[i]>>d[i];
			pc[i].first=c[i];
			pc[i].second=i;
		}
		
		if(m<=1){
			cout<<qmi(qmi(v,2),n-1)%mod<<endl;
			continue;
		}
		sort(pc+1,pc+m+1);
		bool ft=true;
		for(int i=1;i<m;i++){
			if(pc[i].first==pc[i+1].first&&d[pc[i].second]!=d[pc[i+1].second]){
				cout<<0<<endl;
				ft=false;
				break;
			}
		}
		if(!ft)continue;
		bool As=true;
		for(int i=1;i<=m;i++){
			if(c[i]!=i){
				As=false;
				break;
			}
		}
		if(As){
			cout<<qmi(((qmi(v,2))%mod-v+1)%mod,(n-1)%mod)<<endl;
			continue;
		}
		
		bool Bs=true;
		for(int i=1;i<=m;i++){
			if(d[i]!=1){
				Bs=false;
				break;
			}
		}
		if(Bs){
			LL dms=0;
			for(int i=1;i<m;i++){
				if(pc[i].second+1==pc[i+1].second)dms++;
			}
			cout<<chen(qmi(qmi(v,2)%mod,n-1-dms)%mod,qmi((qmi(v,2)-v+1+mod)%mod,dms))<<endl;
			continue;
		}
		
		for(int i=1;i<=m;i++){
			pc[i]={0,0};
		}
	}
	return 0;
}
