#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
map<int,int> mp;
int c[100010],a[100010][2],dp[100010][2];
int qpow(int b,int p)
{
	int ret=1;
	while(p)
	{
		if(p&1) ret=ret*b%mod;
		b=b*b%mod;
		p>>=1;
	}
	return ret;
}
void solve()
{
	int n,m,v,flag=0;
	cin>>n>>m>>v;
	mp.clear();
	while(m--)
	{
		int C,D;
		cin>>C>>D;
		if(mp[C]&&mp[C]!=D) flag=1;
		mp[C]=D;
//		cout<<"mp["<<C<<"]="<<D<<'\n';
	}
//	cout<<"m="<<m<<'\n';
//	cout<<"!:"<<mp.size()<<'\n';
	if(flag)
	{
		cout<<0<<'\n';
		return;
	}
	m=0;
	for(auto p:mp) c[++m]=p.first;
//	sort(c+1,c+m+1);
//	cout<<"m="<<m<<'\n';
	for(int i=1;i<m;i++)
	{
		a[i][1]=qpow(v,c[i+1]-c[i]-1)*(v-1)%mod;
//		cout<<"!:a["<<i<<"][1]="<<a[i][1]<<'\n';
		a[i][0]=(qpow(v,2*(c[i+1]-c[i]))+mod-a[i][1])%mod;
	}
	int ans=0,res=1;
	for(int i=1;i<m;i++)
	{
		ans+=res*a[i][1]%mod*qpow(v,2*(c[m]-c[i+1]))%mod;
		ans%=mod;
		res*=a[i][0];
		res%=mod;
	}
	cout<<((qpow(v,2*(c[m]-c[1]))+mod-ans)%mod*qpow(v,2*(n-c[m]+c[1])))%mod*qpow(v*v%mod,mod-2)%mod<<'\n';
}
signed main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	int t;
	cin>>t;
	while(t--) solve();
}
