#include #define ll long long using namespace std; inline int read(){ int x=0,w=1; char ch=0; while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch-'0');ch=getchar();} return x*w; } const int mod=1e9+7,MAXN=1e5+10; int n,m; ll v; int c[MAXN],d[MAXN]; ll ksm(ll a,int b){ ll res=1; while(b){ if(b&1)res=res*a%mod; a=a*a%mod; b>>=1; } return res; } ll ans=0; int a[30],aa[30]; pairck[30]; void solve(int x){ if(x==n){ int okm=0; for(int i=1;i t[MAXN]; int main(){ freopen("assign.in","r",stdin); freopen("assign.out","w",stdout); int T=read(); while(T--){ // init(); ans=0; n=read();m=read();v=read(); int flag=0; for(int i=1;i<=m;i++){ c[i]=read();d[i]=read(); if(c[i]!=i)flag=1; t[i]=make_pair(c[i],d[i]); } // if(n<=12){ // bl(); // }else if(m==1){ printf("%lld\n",ksm(v*1ll*v%mod,n-1)); continue; } else if(n==m&&!flag){ printf("%lld\n",ksm((v*1ll*v-(v-1))%mod,n-1)); continue; } // else // if(!flag2){ sort(t+1,t+m+1); int okm=1; for(int i=2;i<=m;i++){ if(t[i].first==t[i-1].first&&t[i].second!=t[i-1].second){ printf("0\n");okm=0; break; } } if(okm==0)continue; ll res=1; for(int i=2;i<=m;i++){ if(t[i].first==t[i-1].first)continue; ll T=(ksm(v*1ll*v%mod,t[i].first-t[i-1].first)%mod-ksm(v%mod,t[i].first-t[i-1].first-1)%mod*(v-1)%mod); T=(T%mod+mod); res=T*res%mod; } // cout<