#include<bits/stdc++.h>


using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 super;
ifstream fin("assign.in");
ofstream fout("assign.out");
const int nn=100009;
const int modd=(1e9)+7;
ll t;
ll n,m,v;
ll lim[nn];
__int128 ans;
pair<ll,ll> limit[15];
void out(super u) {
    if(u<10) {
        fout<<(int)(u);
        return ;
    }

    out(u/10);

    fout<<(int)(u%10);
}
super quickpow(super di,ll zhi){
    if(!zhi)    return 1;
    super tmp=quickpow(di,zhi/2);
    if(zhi%2==0){
        return tmp*tmp%modd;
    }
    else return tmp*tmp*di%modd;
}
/*
bool calc(){
    for(int i=1;i<=n;i++){
        if(lim[i]){
            if(i>=2 && lim[i-1]){
                if(limit[i-1]==lim[i-1] && limit[])    return false;
            }
        }
    }

}
void dfs(int u){
    if(u==n){
        if(calc())  ans++;
        return ;
    }
    else{
        limit[u]={1,1};
        dfs(u+1);
        limit[u]={1,2};
        dfs(u+1);
        limit[u]={2,1};
        dfs(u+1);
        limit[u]={2,2};
        dfs(u+1);
    }

}
*/
int main() {
    ull tmp;
    ll c;
    ll tt;
    bool flag1=1;
    ios::sync_with_stdio(false);
    fin>>t;
    while(t--) {
        fin>>n>>m>>v;
        flag1=1;
        for(int i=1; i<=m; i++) {
            fin>>c>>tt;
            if(tt!=1)   flag1=0;
            if(n<=10005)lim[c]=tt;

        }

        if(m==1) {
            ans=1;
            tmp=v*v;
            ans=ans*quickpow(tmp,n-1);
            ans%=modd;
            /*
            for(int i=1;i<=n-1;i++){
                ans*=tmp;
                ans%=modd;
            }
            */
            out(ans);
            fout<<'\n';
            //fout<<ans%modd<<'\n';

        } else if(m==n) {
            ans=1;
            tmp=v*(v-1)+1;

            /*
            for(int i=1;i<=n-1;i++){
                ans*=tmp;
                ans%=modd;
            }
            */
            ans=ans*quickpow(tmp,n-1);
            ans%=modd;
            out(ans);
            fout<<'\n';

            //fout<<ans%modd<<'\n';
        } else{
/*
            ans=1;
            tmp=v*v;
            for(int i=1;i<n;i++){
                if(lim[i] &&lim[i+1]){
                    ans*=1;

                }
                else ans*=tmp,ans%=modd;
            }
            out(ans);
*/
            fout<<'\n';


        }

    }
    //cout << "Hello world!" << endl;
    return 0;
}
