#include<bits/stdc++.h>
typedef unsigned int i4;
typedef unsigned long long i8;
const i8 I=1,MOD=1000000007;
i8 fpow(i8 a,i8 n){
	i8 ans=1;
	for(a%=MOD;n;n>>=1,(a*=a)%=MOD)if(n&1)(ans*=a)%=MOD;
	return ans;
}
void slove(){
	i4 ans=1,n,m,v;
	std::cin>>n>>m>>v;
	std::map<i4,i4>a;
	std::vector<i4>A;
	for(i4 i=0,c,d;i!=m;++i){
		std::cin>>c>>d;
		if(a.count(c)&&a[c]!=d){std::cout<<"0\n";return;}
		a[c]=d;
	}
	for(auto p:a)A.push_back(p.first);
	for(i4 i=1;i<A.size();++i){
		i4 dis=A[i]-A[i-1];
		i4 X=(fpow(I*v*v,dis)+MOD-(v-1)*fpow(v,dis-1)%MOD)%MOD;
		ans=I*ans*X%MOD;
	}
	std::cout<<I*fpow(I*v*v,A[0]-1)*ans%MOD*fpow(I*v*v,n-A[A.size()-1])%MOD<<"\n";
}
int main(){
	std::ios::sync_with_stdio(0);
	std::cin.tie(0),std::cout.tie(0);
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	i4 T;std::cin>>T;
	while(T--)slove();
	return 0;
}
