#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N=1e5+5,modd=1e9+7;
int n,m,lim,res;
int ori[N];
int dp[N];
bool cft;

void init(){
	cft=0;
	res=0;
	for(int i=1;i<=n;i++)ori[i]=0;
}

int qpow(int a,int b){
	int res=1;
	for(;b;a=a*a%modd,b>>=1)if(b&1)res=res*a%modd;
	return res;
}

signed main(){
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	int T;
	cin>>T;
	
	for(;T;T--){
		cin>>n>>m>>lim;		
		
		if(n<=1e5)init();
		for(int i=1,p,v;i<=m;i++){
			cin>>p>>v;
			if(n<=1e5&&ori[p]&&ori[p]!=v)cft=1;
			if(n<=1e5)ori[p]=v;
		}
		if(m==n){
			cout<<qpow((lim)%modd*(lim-1)%modd+1,n-1)<<'\n';
			continue;
		}
		if(n>1e5){
			cout<<0<<'\n';
			continue;
		}
		if(cft){
			cout<<0<<'\n';
			continue;
		}
		
		dp[1]=1;
		for(int i=1;i<n;i++){
			if(!ori[i]&&!ori[i+1]){
				dp[2]=(dp[1]*lim%modd*lim%modd);
			}
			else if(ori[i]&&ori[i+1]){
				dp[2]=(dp[1]*((lim*(lim-1)%modd+1)%modd)%modd);
			}
			else{
				dp[2]=(dp[1]*((lim*(lim)%modd)%modd)%modd);
			}
			dp[1]=dp[2];
		}
		cout<<dp[2]<<'\n';
	}
	
	return 0;
} 
