#include<bits/stdc++.h>
long long mod=1000000007;
long long t,n,m,v,a[100009],b[100009],dp[100009],pt[100009],pt2[100009];
long long fast_pow(long long x,long long y)
{
	if(y<0)return 1;
	long long sum=1;
	while(y>0)
	{
		if(y%2==1)
		{
			sum*=x;
			sum%=mod;
		}
		x*=x;
		x%=mod;
		y/=2;
	}
	return sum;
}
void sort_(long long l,long long r)
{
	if(l>=r)return;
	long long mid=(l+r)/2;
	sort_(l,mid);
	sort_(mid+1,r);
	long long i=l,j=mid+1,k=0;
	while(i<=mid&&j<=r)
	{
		if(a[i]<a[j])
		{
			++k;
			pt[k]=a[i];
			pt2[k]=b[i];
			++i;
		}
		else
		{
			++k;
			pt[k]=a[j];
			pt2[k]=b[j];
			++j;
		}
	}
	while(i<=mid)
	{
		++k;
		pt[k]=a[i];
		pt2[k]=b[i];
		++i;
	}
	while(j<=r)
	{
		++k;
		pt[k]=a[j];
		pt2[k]=b[j];
		++j;
	}
	for(i=0;i<k;++i)
	{
		a[i+l]=pt[i+1];
		b[i+l]=pt2[i+1];
	}
	return;
}
int main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	scanf("%lld",&t);
	for(int tt=1;tt<=t;++tt)
	{
		scanf("%lld%lld%lld",&n,&m,&v);
		for(int i=1;i<=m;++i)
		{
			scanf("%lld%lld",&a[i],&b[i]);
		}
		sort_(1,m);
		for(int i=m;i>=1;--i)
		{
			dp[i]=fast_pow(v,2*n-2*a[i]);
		}
		for(int i=m-1;i>=1;--i)
		{
			if(a[i]==a[i+1]&&b[i]!=b[i+1])v=0;
			if(a[i]!=a[i+1])dp[i]=dp[i+1]*(fast_pow(v,2*a[i+1]-2*a[i])-fast_pow(v,a[i+1]-a[i])+fast_pow(v,a[i+1]-a[i]-1)+mod);
			else dp[i]=dp[i+1];
			dp[i]%=mod;
		}
		dp[1]*=fast_pow(v,2*a[1]-2);
		if(v==0)dp[1]=0;
		dp[1]%=mod;
		printf("%lld\n",dp[1]);
	}
	return 0;
}
