#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+7;

// 先考虑水前面几个测试点 , 比如 v = 2
// 草，审错题了 
// 1 2 1
// 1 2   1
// 2 2   2
// 1 1   2
// 2 1   4
// 1 2 4
// 1 2 1
// 9 
// 杨辉三角。。。 
// 下面解决带 0 的问题
// 2 0 0 0 0 4^5
// 从性质 B 开始考虑 
// 啊 , 时间不够了 , 算了 
 

ll T;
ll n,m,v;
ll c,d;
ll a[200000];
ll f[1000][1000];
ll qpow(ll a,ll b){
	ll ans=1;
	while(b){
		if(b&1) ans=ans*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return ans%mod;
}
ll dbsl(ll x,ll y){
	return (x-qpow(x,y+1))/(1-x);
}

int main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	cin>>T;
	memset(f,0,sizeof(f));
	f[1][1]=1;
	for(int i=2;i<=1000;i++){
		for(int j=1;j<=1000;j++){
			f[i][j]=(f[i-1][j-1]+f[i-1][j])%mod;
		}
	}
	while(T--){
		ll ans=0,cnt;
		bool p=true,q=true;
		cin>>n>>m>>v;
		for(int i=1;i<=n;i++) a[i]=0;
		for(int i=1;i<=m;i++){
			cin>>c>>d;
			if(a[c]&&d!=a[c]) p=false;
			a[c]=d;
		}
		for(int i=1;i<=n;i++) if(a[i]==0) q=false;
		if(q){
			if(!p) cout<<0<<endl;
			else{
				for(int i=1;i<=n;i++){
					ans+=f[n][i]*qpow(v,i-1);
				}
			}
			cout<<ans<<endl;
		}
		else{
			if(!p) cout<<0<<endl;
			else cout<<qpow(v*v,n-1)<<endl;
		}
	}
	return 0;
}
