#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
const long long maxm=1e5+5;
long long n,m,v;
long long x[maxm];
long long qp(long long a,long long b)
{
	if(b<0)
	{
		return 0;
	}
	long long res=1;
	while(b)
	{
		if(b&1)
		{
			res=(res*a)%mod;
		}
		a=(a*a)%mod;
		b>>=1;
	}
	return res;
}
void solve()
{
	long long ans=1;
	cin>>n>>m>>v;
	for(long long i=1,v_i;i<=m;i++)
	{
		cin>>x[i]>>v_i;
		x[i]=x[i]*3e9+v_i;
	}
	sort(x+1,x+m+1);
	x[0]=0;
	long long t=0;
	for(long long i=1;i<=m;i++)
	{
		if((long long)(x[i]/3e9)==(long long)(x[i-1]/3e9)&&x[i]!=x[i-1])
		{
			cout<<0<<'\n';
			return ;
		}
		if(x[i]!=x[i-1])
		{
			x[++t]=x[i];
		}
	}
	m=t;
	for(long long i=1;i<=m;i++)
	{
		x[i]/=3e9;
	}
	x[0]=1,x[m+1]=n+1;
	long long vv=v*v%mod,vvv=(v*v-v+1)%mod;
	for(long long i=1;i<=m;i++)
	{
		if(x[i]==1)
		{
			continue;
		}
		if(x[i]-x[i-1]>1) ans=ans*qp(vv,x[i]-x[i-1])%mod;
		else ans=ans*vvv%mod;
	}
	ans=(ans*qp(vv,n-x[m]))%mod;
	cout<<ans<<'\n';
}
int main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(false);
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	long long t;
	cin>>t;
	while(t--)
	{
		solve();
	}
}
