#include<bits/stdc++.h>
using namespace std;
struct node{
	long long c,d;
}a[1000005];
long long mod=1e9+7;
int T;
long long n,m,v,ans,t;
bool cmp(node a,node b){
	return a.c>b.c;
}
int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	cin>>T;
	while(T--){
		cin>>n>>m>>v;
		t=0;
		ans=0;
		bool r=0;
		for(int i=1;i<=m;i++){
			cin>>a[i].c>>a[i].d;
		}
		sort(a+1,a+1+n,cmp);
		for(int i=2;i<=m;i++){
			t++;
			if(a[i].c==a[i-1].c&&a[i].d!=a[i-1].d){
				r=1;
				break;
			}
			if(a[i].c==a[i-1].c&&a[i].d==a[i-1].d) t--;
		}
		t--; 
		if(r){
			cout<<0<<endl;
			continue;
		}
		ans=(v*v)%mod;
		for(int i=1;i<=n-2;i++){
			ans=(ans*(v*v)%mod)%mod;
		}
		if(m!=1){
			ans-=t;
		}
		cout<<ans<<endl;
	}
	return 0;
} 
