#include using namespace std; typedef long long ll; ll read() { char c=getchar(); ll ret=0, ne=1; while(!('0'<=c&&c<='9')) { if(c=='-') ne=-1; c=getchar(); } while('0'<=c&&c<='9') { ret=ret*10+c-'0'; c=getchar(); } return ret*ne; } char buf[30]; void print(ll x) { if(!x) { putchar('0'); putchar('\n'); return ; } if(x<0) { putchar('-'); x=-x; } int tot=0; while(x) { buf[++tot]=x%10+'0'; x/=10; } for(int i=tot;i>=1;i--) putchar(buf[i]); putchar('\n'); } const int maxn=1e5+5; const ll M=1e9+7; void MOD(ll &x) { if(x>=M) x%=M; } pair c[maxn]; ll pw(ll x, ll k) { if(!k) return 1LL; ll p=x; --k; while(k) { if(k&1) x*=p; MOD(x); p*=p; MOD(p); k>>=1; } return x; } int main() { freopen("assign.in","r",stdin); freopen("assign.out","w",stdout); int T=read(); while(T--) { ll n=read(), m=read(), v=read(); for(int i=1;i<=m;i++) c[i].first=read(), c[i].second=read(); sort(c+1,c+m+1); bool flg=false; m=unique(c+1,c+m+1)-c-1; for(int i=2;i<=m;i++) { if(c[i].first==c[i-1].first) { flg=true; break; } } if(flg) { print(0); continue; } ll V=v*v%M; ll ans=pw(V, c[1].first-1); for(int i=1;i