#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#include<cstdio>
#include<algorithm>
#include<map>
#define lb(x) (x&(-x))
using namespace std;
const long long mod=1e9+7;
int T;
map<long long,long long> a;
long long n,m,v,ans,d,fl,c[1000001];
long long ksm(long long x,long long y)
{
	long long as=1;
	while(y)
	{
		if(y&1) as=as*x%mod;
		y>>=1;
		x=x*x%mod;
	}
	return as;
}
int main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	scanf("%d",&T);
	while(T--)
	{
		scanf("%lld%lld%lld",&n,&m,&v);
		ans=1;
		fl=0;
		a.clear();
		for(int i=1;i<=m;++i)
		{
			scanf("%lld%lld",&c[i],&d);
			if(a[c[i]]&&a[c[i]]!=d)
			{
				fl=1;
				break;
			}
			a[c[i]]=d;
		}
		if(fl)
		{
			printf("0\n");
			continue;
		}
		sort(c+1,c+1+m);
		if(n==m)
		ans=ksm(((v-1)*v+1)%mod,n-1);
		else ans=ksm(((v)*v)%mod,n-1);
//		for(int i=1;i<m;++i)
//		{
//			if(a[c[i]]&&a[c[i]+1])
//			{
//				ans=(ans+mod-v+1)%mod;
//			}
//		}
		printf("%lld\n",ans);
	}
	return 0;
}
