#include <bits/stdc++.h>
using namespace std;
int T;
long long n ,m ,v;
struct node{
	int id ,w;
}a[100005];
bool cmp(node a ,node b){
	return a.id<b.id;
}
long long mod=1e9+7;
long long qp(long long x ,long long k){
	long long res=1;
	while(k){
		if(k&1)res=res*x%mod;
		x=x*x%mod;
		k>>=1;
	}
	return res;
}
int main(){
	freopen("assign.in" ,"r" ,stdin);
	freopen("assign.out" ,"w" ,stdout);
	cin.tie(0) ,cout.tie(0) ,ios::sync_with_stdio(false);
	cin >> T;
	while(T--){
		cin >> n >> m >> v;
		for(int i=1;i<=m;i++){
			cin >> a[i].id >> a[i].w;
		}
		sort(a+1 ,a+m+1 ,cmp);
		long long ans=1 ,flag=0;
		a[0].id=1;
		for(int i=1;i<=m;i++){
			if(i!=1&&a[i].id==a[i-1].id&&a[i].w!=a[i-1].w){
				cout << 0 << endl;
				flag=true;
				break;
			}
			if(a[i].id==a[i-1].id)continue;
			long long res=qp(v*v%mod ,a[i].id-a[i-1].id);
			long long del=qp(v ,a[i].id-a[i-1].id-1)*(v-1)%mod;
			if(i==1)del=0;
			ans=(ans*((res-del+mod)%mod)%mod);
		}
		ans=ans*qp(v*v%mod ,n-a[m].id)%mod;
		if(flag)continue;
		cout << ans << endl;
	}
}
