#include<bits/stdc++.h>
#define int long long
const int mod=1e9+7;
int fpow(int a,int b=mod-2){
    int r=1;
    while(b){
        if(b&1)r=r*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return r;
}
using namespace std;
int n,m,v,ivv;
struct limit{
    int c,d;
}l[100005];
void sol(){
    cin>>n>>m>>v;ivv=fpow(v);
    for(int i=1;i<=m;i++)cin>>l[i].c>>l[i].d;
    sort(l+1,l+1+m,[](limit x,limit y){return x.c<y.c;});
    for(int i=1;i<m;i++){
        if(l[i].c==l[i+1].c&&l[i].d!=l[i+1].d){
            cout<<"0\n";
            return;
        }
    }
    int ans=fpow(v*v%mod,l[1].c-1);
    for(int i=1;i<m;i++){
        if(l[i].c==l[i+1].c)continue;
        int X=l[i].c,Y=l[i+1].c;
        int len=Y-X+1;
        if(len==2){
            ans=ans*((v-1)*v%mod+1)%mod;
        }
        else{
            int res=0,tmp=1;
            res=(res+(v-1)*v%mod*fpow(v*v%mod,len-2)%mod)%mod;
            tmp=tmp*(1-fpow(ivv,len-2)+mod)%mod;
            tmp=tmp*fpow((1-ivv+mod)%mod)%mod;
            tmp=tmp*ivv%mod*ivv%mod*(v-1)%mod;
            tmp=tmp*fpow(v*v%mod,len-1)%mod;
            res=(res+tmp)%mod;
            res=(res+fpow(v,len-2))%mod;
            ans=ans*res%mod;
        }
    }
    ans=ans*fpow(v*v%mod,n-l[m].c)%mod;
    cout<<ans<<'\n';
    return;
}
int T;
signed main(){
    freopen("assign.in","r",stdin);
    freopen("assign.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>T;
    while(T--)sol();
    return 0;
}