#include<bits/stdc++.h>
using namespace std;
const long long mod=1000000007;
long long n,m,v;
struct xianzhi
{
	long long c,d;
}l[100005];
bool cmp(xianzhi x,xianzhi y)
{
	return x.c<y.c;
}
long long fastpow(long long a,long long b)
{
	long long aa=a,sum=1;
	while(b)
	{
		if(b&1)
		{
			sum*=aa;
			sum%=mod;
		}
		aa*=aa;
		aa%=mod;
		b>>=1;
	}
	return sum;
}
long long xiangge(long long i,long long j)
{
	int k=j-i-1;
	return ((fastpow(v,k)*(v-1))%mod);
}
long long dp[100005],ans; 
int main()
{	
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
	int T;
	cin>>T;
	while(T--)
	{
		cin>>n>>m>>v;
		for(int i=1;i<=m;i++)
		{
			scanf("%lld%lld",&l[i].c,&l[i].d); 
		}
		sort(l+1,l+m+1,cmp);
		bool flag=true;
		for(int i=2;i<=m;i++)
		{
			if(l[i].c==l[i-1].c && l[i].d!=l[i-1].d)
			{
				flag=false;
				break;
			}
		}
		if(!flag)
		{
			cout<<0<<"\n";
		}
		else
		{
			if(m>1)
			{
				dp[1]=fastpow(v,(l[1].c-1)*2);
				for(int i=2;i<=m;i++)
				{
					long long x=l[i-1].c,y=l[i].c;
					if(x!=y)
					{
						dp[i]=dp[i-1]*((fastpow(v,(y-x)*2)+mod-xiangge(x,y))%mod)%mod;
					}
					else
					{
						dp[i]=dp[i-1];
					}
				}
				dp[m]*=fastpow(v,(n-l[m].c)*2);
				dp[m]%=mod;
				cout<<dp[m]<<"\n";
				for(int i=1;i<=m;i++)
				{
					dp[i]=0;
				}
			}
			else
			{
				cout<<fastpow(v,(n-1)*2)<<"\n";
			}
		}
	}
	
	return 0;
}
