#include<bits/stdc++.h>
using namespace std;
const long long Mod=1e9+7,N=1e5+10;
long long T;
struct node{
	long long c,d;
}a[N];
bool cmp(node x,node y)
{
	return x.c<y.c;
}
long long n,m,v,nxt[N];
long long ksm(long long x,long long k)
{
	long long res=1,l=x;
	while(k)
	{
		if(k&1)res=res*l%Mod;
		l=l*l%Mod;
		k>>=1; 
	}
	return res;
}
int main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>T;
	while(T--)
	{
		cin>>n>>m>>v;
		long long ans=1,l=m;
		for(long long i=1,c,d;i<=m;i++)
		{
			cin>>c>>d;
			a[i]={c,d};
			nxt[i]=i+1;
		}
		sort(a+1,a+m+1,cmp);
		long long x=1;
		for(long long i=m;i>=1;i--)
		{
			if(a[i].c==a[i+1].c)
			{
				if(a[i].d==a[i+1].d) l--,nxt[i]=nxt[i+1];
				else{
					ans=0;
					break;
				}
			}
		}
		if(ans==0)
		{
			cout<<0<<endl;
			continue;
		}
		if(l==1)
		{
			cout<<ksm(v*v%Mod,n-1)<<endl;
			continue;
		}	
		for(int i=1;i<=m;i++);
		cout<<ans<<endl;
	}
	return 0;
 } 
