#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007

struct onelimit{
    int pos;
    int val;
}lmts[100010];
int T =0;

bool cmp(onelimit a,onelimit b){
    return a.pos<b.pos;
}
long long modpow(long long a,long long b){
	long long ans = 1ll;
//	cout<<ans<<' ';
	while(b>0){
		ans=1ll*ans*a;
		ans%=mod;
		b--;
//		cout<<ans<<' ';
	}
	return ans;
}

void solve(){
    int n,m,v;
    cin>>n>>m>>v;
    for(int i=0;i<m;i++){
        int tmp1,tmp2;
        cin>>tmp1>>tmp2;
        lmts[i]={tmp1,tmp2};
    }
    sort(lmts,lmts+m,cmp);
    int k=0;
    for(int i=0;i<m-1;i++){
        if(lmts[i].pos==lmts[i+1].pos){
            if(lmts[i].val==lmts[i+1].val){
                lmts[i+1].pos=1e9+200;
            }else{
                cout<<"0\n";
                return;
            }
        }else if(lmts[i].pos==lmts[i+1].pos-1){
        	k++;
		}
    }
	long long ans=0;
	ans=1ll*v*v%mod;
	ans=modpow(ans,n-k-1);
	ans=ans*modpow(v*(v-1)%mod+1,k);
	ans%=mod;
	cout<<ans<<'\n';
	return;
}

int main()
{
	freopen("assign.in","r",stdin);
	freopen("assign.out","w",stdout);
    cin>>T;
    while(T--){
        solve();
    }
	return 0;
}
/*
10 11 2
10 2
7 2
7 2
2 2
3 2
4 2
10 2
7 2
10 2
3 2
3 2

*/

