#include<bits/stdc++.h>
using namespace std;
int T;
long long n,m,v,b[100005],ans;
struct pp
{
	long long wz,sz;
}a[100005];
bool q;
bool cmp(pp a,pp b)
{
	return a.wz<b.wz;
}
long long mod=1e9+7;
long long pf(long long a,long long b)
{
	long long ans=1;
	while(b)
	{
		if(b&1) ans=(ans*a)%mod;
		a=a*a%mod;
		b>>=1; 
	}
	return ans;
}
inline int read()
{
	int x=0;char c=getchar();bool f=0;
	for(;!isdigit(c);c=getchar()) f=!(c^45);
	for(;isdigit(c);c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	return (f?-x:x);
}
int main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	T=read();
	for(int i=1;i<=T;i++)
	{
		n=read();m=read();v=read();
		for(int j=1;j<=m;j++)
		{
			a[j].wz=read();a[j].sz=read();
		}
		q=true;
		sort(a+1,a+1+m,cmp);
		ans=pf(v,(a[1].wz-1)*2);
		for(int j=2;j<=m;j++)
		{
			if(a[j].wz==a[j-1].wz)
			{
				if(a[j].sz!=a[j-1].sz)
				{
					q=false;
					break;
				}
				else continue;
			}
			ans*=(pf(v,(a[j].wz-a[j-1].wz)*2)+mod-(pf(v,(a[j].wz-a[j-1].wz-1))*(v-1)%mod))%mod;
			ans%=mod;
		}
		ans*=pf(v,(n-a[m].wz)*2);
		ans%=mod;
		if(q) printf("%lld\n",ans);
		else printf("0\n");
	}
	return 0;
}
