#include #include typedef long long ll; inline void read(int&x){ x=0; char c=getchar(); bool f=0; for(;c<'0'||c>'9';c=getchar())if(c=='-')f=1; for(;c>='0'&&c<='9';c=getchar())x=x*10+(c^48); if(f)x=-x; } const int N=100005,mod=1000000007; int T,n,m,v,val[N],ans; struct Node{ int c,d; bool operator<(const Node&y){ return c>=1)if(y&1)Mul(res,x); return res; } inline int fix(int x){ return x+((x>>31)&mod); } inline int sub(int x,int y){ return fix(x-y); } inline int sqr(int x){ return ll(x)*x%mod; } void work(){ read(n),read(m),read(v),ans=1; for(int i=1;i<=m;i++)read(a[i].c),read(a[i].d); std::sort(a+1,a+m+1); Mul(ans,pow(sqr(v),a[1].c-1)),Mul(ans,pow(sqr(v),n-a[m].c)); for(int i=1;i