#include #define il inline #define int long long #define fi first #define se second #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) #define Rep(i,a,b) for(int i=(a);i<(b);i++) #define tep(i,u) for(int i=head[u];i;i=e[i].nex) #define pii pair #define pb push_back #define mp make_pair using namespace std; il int read(){ int x=0,f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x*f; } const int N=1e5+10,MOD=1e9+7; pii p[N]; int qpow(int x,int k){ int res=1; while(k){ if(k&1) res=res*x%MOD; x=x*x%MOD;k>>=1; }return res; } signed main() { freopen("assign.in","r",stdin); freopen("assign.out","w",stdout); int T=read(); while(T--){ int n=read(),m=read(),v=read(); rep(i,1,m){ int c=read(),d=read(); p[i]=mp(c,d); } sort(p+1,p+1+m);m=unique(p+1,p+1+m)-p-1; bool fl=1; rep(i,2,m){ if(p[i].fi==p[i-1].fi){ fl=0; break; } } if(fl==0){ puts("0"); continue; } //考虑合法的方案数即总的减去不合法的。 //对于相邻的不合法的,即 v^(ci-c{i-1}-2)*(v-1) 种,总共有 v^{2(ci-c{i-1})} 种。 int ans=qpow(v*v%MOD,p[1].fi-1); rep(i,2,m){ int w=qpow(v*v%MOD,p[i].fi-p[i-1].fi); w=(w-qpow(v,p[i].fi-p[i-1].fi-1)%MOD*(v-1)%MOD+MOD)%MOD; ans=ans*w%MOD; } ans=ans*qpow(v*v%MOD,n-p[m].fi)%MOD; printf("%lld\n",ans); } return 0; }