#include<bits/stdc++.h>
using namespace std;
int T,m;
long long n,v,f[110000],g[110000];
const long long mod=1e9+7;
struct ll
{
	int x,y;
}a[110000];
bool cmp(ll a,ll b)
{
	return a.x<b.x;
}
long long ksm(long long x,long long y)
{
	long long ans=1;
	while(y)
	{
		if(y%2)ans=ans*x%mod;
		x=x*x%mod;
		y/=2;
	}
	return ans;
}
long long C(int n,int m)
{
	return 1ll*f[m]%mod*g[n]%mod*g[m-n]%mod;
}
int main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	cin>>T;
	f[0]=g[0]=1;
	for(int i=1;i<=100000;i++)f[i]=f[i-1]*i%mod,g[i]=ksm(f[i],mod-2);
	while(T--)
	{
		scanf("%lld%d%lld",&n,&m,&v);
		for(int i=1;i<=m;i++)scanf("%d%d",&a[i].x,&a[i].y);
		sort(a+1,a+1+m,cmp);
		int fl=0,p=0;
		for(int i=1;i<m;i++)
		{
			if(a[i].x==a[i+1].x&&a[i].y!=a[i+1].y)
			{
				printf("0\n");
				fl=1;
				break;
			}
		}
		if(fl)continue;
		long long fw=1;
		long long ans=ksm(v,(2ll*(n-1)));
		for(int i=1;i<m;i++)if(a[i].x+1==a[i+1].x)p++;
		for(int i=1;i<=p;i++)
		{
			fw=-fw;
			ans=((ans+fw*C(i,p)%mod*ksm(v-1,i)%mod*ksm(v,2ll*(n-1-i))%mod)%mod+mod)%mod;
		}
		printf("%lld\n",ans);
	}
	return 0;
}
