#include<bits/stdc++.h>
const int mo=1000000007;
using namespace std;
int n,m,v,a[1000005];
signed main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	int T;
	scanf("%d",&T);
	while(T--)
	{
		memset(a,0,sizeof(a));
		long long s=1,x,y,q,p,bj1=0;
		bool bj=true;
		scanf("%d %d %d",&n,&m,&v);
		for(int i=1;i<=m;i++)
		{
			scanf("%lld %lld",&x,&y);
			if(a[x]!=y&&a[x]!=0)
				bj=false;
			else
				a[x]=y;
			if(q!=x||p!=y&&i!=1)
				bj1=1;
			q=x,p=y;
		}
		if(bj==false)
		{
			printf("0\n");
			continue;
		}
		else if(n==m)
		{
			for(int i=1;i<n;i++)
				s*=(v*(v-1)+1),s%=mo;
			printf("%lld\n",s);
		}
		else if(m==1||bj1==0)
		{
			for(int i=1;i<=n-1;i++)
				s*=v,s%=mo;
			printf("%lld\n",s*s%mo);
		}
		else
		{
			for(int i=1;i<n;i++)
				s*=(v*(v-1)+1),s%=mo;
			for(int i=1;i<=n-1;i++)
				s*=v,s%=mo;
			printf("%lld\n",s);
		}
	}
	return 0;
}
