#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+3;
const int Mod=1e9+7;
int T;
int n,m,v;
int c[N];
int d[N];
int ans;
int x[N];
int xx[N];
int a[N];
int b[N];
//int qp(int x,int y)
//{
//	
//}
int in()
{
	int ans=0,ff=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())
	{
		if(c=='-')
		{
			ff*=-1;
		}
	}
	for(;isdigit(c);c=getchar())
	{
		ans=ans*10+c-'0';
	}
	return ans*ff;
}
void out(int x)
{
	if(x<0)
	{
		x=-x;
		putchar('-');
	}
	if(x>=10)
	{
		out(x/10);
	}
	putchar(x%10+'0');
}
int check()
{
	for(int i=1;i<=n;i++)
	{
		xx[i]=x[i];
	}
	for(int i=1;i<=n-1;i++)
	{
		if(xx[i]==a[i])
		{
			if(xx[i+1]==0)
			{
				xx[i+1]=b[i];
			}
			else
			{
				if(xx[i+1]!=b[i])
				{
					return 0;
				}
			} 
		}
	}
	return 1;
}
void dfs(int loc)
{
	if(loc==n)
	{
		ans+=check();
		return;
	}
	for(int i=1;i<=v;i++)
	{
		for(int j=1;j<=v;j++)
		{
			a[loc]=i;
			b[loc]=j;
			dfs(loc+1); 
		}
	}
	return;
}
signed main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	T=in();
	while(T--)
	{
		n=in();
		m=in();
		v=in();
		ans=0;
		int d1=0;
		memset(c,0,sizeof c);
		memset(d,0,sizeof d);
		memset(x,0,sizeof x);
		memset(a,0,sizeof a);
		memset(b,0,sizeof b);
		bool flag=1;
		for(int i=1;i<=m;i++)
		{
			c[i]=in();
			d[i]=in();
			if(x[c[i]]==0)
			{
				x[c[i]]=d[i];
			}
			else if(x[c[i]]!=d[i])
			{
				ans=0;
				out(0);
				flag=0;
				puts("");
				
			}
			if(d[i]==1)
			{
				d1++;
			}
		}
		if(flag)
		{
			if(n==m)
			{
				int x=v*(v-1)%Mod;
				x++;
				x%=Mod;
				ans=1;
				for(int i=1;i<=n-1;i++)
				{
					ans*=x;
					ans%=Mod;
				}
				out(ans);
				puts("");
			}
			else if(v<=2)
			{
				dfs(1);
				out(ans);
				puts("");
			}
			else
			{
				out(1);
				puts("");
			}
		}
//		else if(d1==m)
//		{
//			ans=1;
////			ans=qp(v,n+1-m);
//			for(int i=1;i<=n+1-m;i++)
//			{
//				ans*=v;
//				ans%=Mod;
//			}
//			out(ans);
//			puts("");
//		}
	}
	return 0;
}

