复杂度应该没问题,为什么 TLE 啊
#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e5+10,Mod=1e9+7,SIZE=1<<14;
char getc() {
static char buf[SIZE],*begin=buf,*end=buf;
if(begin==end) begin=buf,end=buf+fread(buf,1,SIZE,stdin);
return *begin++;
}
int read() {
int ret=0; char ch=getc();
while(!isdigit(ch)) ch=getc();
while(isdigit(ch)) ret=ret*10+ch-'0',ch=getc();
return ret;
}
void write(long long x) {
if(x>9) write(x/10);
putchar(x%10+'0');
}
struct R { int c,d; }a[N];
ll power(ll a,int b) {
ll ans=1;
while(b) {
if(b&1) ans=ans*a%Mod;
a=a*a%Mod,b>>=1;
}
return ans;
}
void solve() {
int n=read(),m=read(),v=read();
for(int i=1;i<=m;i++) a[i].c=read(),a[i].d=read();
sort(a+1,a+m+1,[](R a,R b) { return a.c<b.c; }); ll ans=power(v,2*(a[1].c-1));
for(int i=2;i<=m;i++) {
if(a[i].c==a[i-1].c&&a[i].d!=a[i-1].d) return write(0),putchar('\n'),void();
ans=ans*(((power(v,2*(a[i].c-a[i-1].c))-power(v,a[i].c-a[i-1].c)+Mod)%Mod+power(v,a[i].c-a[i-1].c-1))%Mod)%Mod;
}
write(ans*power(v,2*(n-a[m].c))%Mod),putchar('\n');
}
int main() {
//freopen("assign.in","r",stdin);
//freopen("assign.out","w",stdout);
int t=read();
while(t--) solve();
return 0;
}