#include<bits/stdc++.h>
#define TN 1000000007
using namespace std;
int T,n,m,v,ord,numm;
long long ans=1;
void inal(int no){
	long long temp=v;
	int vi=v-1;
	for(int i=1;i<no;i++){
		temp*=vi;
		temp+=1;
		temp%=TN;
	}
	ans*=temp;
	ans%=TN;
}
void cv(int no){
	long long vv=v;
	while(no){
		if(no&1)ans*=vv,ans%=TN;
		vv*=v;vv%=TN;
		no/=2;
	}
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
//	freopen("D:/down/day0/assign/assign2.in","r",stdin);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>T;
	while(T--){
		map<int,int> num;
		ans=-1;
		cin>>n>>m>>v;
		int last=-1,law=1,vnum=n;
		while(m--){
			cin>>ord>>numm;
			if(num[ord]==0){
				num[ord]=numm;
			}
			else if(num[ord]!=numm){
				while(m--)cin>>ord>>numm;
				ans=0;
				cout<<0<<endl;
				break;
			}
		}
		if(!ans)continue;
		ans=1;
		for(pair<int,int> i:num){
			if(i.first==last+1)law++;
			else if(law!=1){
				inal(law);
				law=1;
				vnum-=law;
			}
			last=i.first;
		}
		inal(law);
		vnum-=law;
		cv(2*vnum-2);
		cout<<ans<<endl;
//		if(num.size()==n){
//			
//		}
	}
	return 0;
}

