#include <bits/stdc++.h>
#define int long long
const int Maxn=100010,p=1e9+7;
using namespace std;
int T,n,m,v,ans,len;
struct Node
{
int num;
int val;
}a[Maxn];
int qp(int a,int x)
{
int ans=1;
while(x){
if(x&1){
ans=ans*a%p;
}
x>>=1;
a=a*a%p;
}
return ans;
}
bool cmp(Node a,Node b)
{
return a.num<b.num;
}
signed main()
{
scanf("%d",&T);
while(T--){
ans=1;
memset(a,0,sizeof(a));
scanf("%d%d%d",&n,&m,&v);
len=n-1;
for(int i=1;i<=m;i++){
scanf("%d%d",&a[i].num,&a[i].val);
}
sort(a+1,a+m+1,cmp);
int prenum=-1,len1=0;
for(int i=1;i<=m;i++){
if(a[i].num==a[i-1].num){
if(a[i].val!=a[i-1].val){
ans=0;
break;
}
}
else if(a[i].num==prenum+1){
len1++;
prenum++;
}
else{
if(prenum==-1){
prenum=a[i].num;
continue;
}
int len2=a[i].num-a[i-1].num;
ans=ans*( qp(v,2*len2)+ p -((v-1)*qp(v,len2-1))%p )%p;
len-=len2;
prenum=a[i].num;
}
}
if(ans==0){
printf("%d\n",ans);
continue;
}
len-=len1;
ans=ans*qp(v,2*len)%p;
ans=ans*qp((v*v-v+1)%p,len1)%p;
printf("%d\n",ans);
}
}