#include #define int long long #define MX 100005 #define GP pair #define MP make_pair using namespace std;int read(); const int mod=1000000007; int qpow(int x,int y){ int z=1;while(y){ if(y&1) z=z*x%mod; x=x*x%mod;y>>=1; }return z; } GP w[MX]; int n,m,M,v,p[MX]; signed main(){ freopen("assign.in","r",stdin); freopen("assign.out","w",stdout); int T=read();while(T--){ n=read();M=read();v=read(); for(int i=1;i<=M;i++){ w[i].first=read(); w[i].second=read(); }sort(w+1,w+1+M); int F=1;m=0; for(int i=1;i<=M;i++){ if(w[i].first==w[i-1].first){ if(w[i].second!=w[i-1].second) F=0; }else{ p[++m]=w[i].first; } } if(!F){printf("0\n");continue;} int res=qpow(v,n-p[m]+p[1]-1)%mod; res=(res*res)%mod; for(int i=2;i<=m;i++){ int cnt=qpow(v,p[i]-p[i-1]-1); int ans=cnt;cnt=(cnt*v)%mod; ans=(ans+cnt*(cnt-1))%mod; res=(res*ans)%mod; }printf("%lld\n",res); } return 0; } int read(){ int Ca=0,Cf=1;char Cr=' '; while(Cr<'0' || Cr>'9'){Cr=getchar();if(Cr=='-'){Cf=-Cf;}} while(Cr>='0' && Cr<='9'){Ca=Ca*10+Cr-48;Cr=getchar();} return Ca*Cf; }