#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+7;
const int mod=1e9+7;

struct node{
	int c,d;
}a[N];

bool cmp(node A,node B){
	return A.c <B.c ;
}

ll qpow(ll a,int b){
	ll res=1;
	while(b){
		if(b&1){
			res*=a;
			res%=mod;
			res+=mod;
			res%=mod;
		}
		a*=a;
		a%=mod;
		a+=mod;
		a%=mod;
		a+=mod;
		a%=mod;
		b>>=1;
	}
	return res;
}

int main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	
	int t;
	cin>>t;
	while(t--){
		int n,m,v;
		bool flag=true;
		cin>>n>>m>>v;
		int cnt1=n-1,cnt2=0;
		for(int i=1;i<=m;i++){
			scanf("%d%d",&a[i].c ,&a[i].d );
			
		}
		sort(a+1,a+m+1,cmp);
		for(int i=1;i<m;i++){
			if(a[i].c==a[i+1].c&&a[i].d !=a[i+1].d ){
				flag=0;
				break;
			}
			
			if(a[i].c==a[i+1].c-1){
				cnt2++;
				cnt1--;
			}
		}
		
		if(!flag){
			printf("0\n");
			continue;
		}
		
		ll ans=qpow((1ll*v*v),cnt1);
		ans*=qpow((1ll*v*v)-v+1,cnt2);
		ans%=mod;
		
		printf("%d\n",ans);
		
	}
	
    return 0;
}
/*
10 5 2
2 2
3 2
4 2
7 2
10 2

0 2 2 2 0 0 2 0 0 2
 4 3 3 4 4 4 4 4 4


*/
