#include<bits/stdc++.h>
using I=long long;using str=std::string;
template<class T>using V=std::vector<T>;
template<class T,I N>using A=std::array<T,N>;
void solve(){
  const I MOD=1e9+7;
  auto pw=[&](I x,I y){
    I w=1;
    for(;y;x=x*x%MOD,y>>=1)if(y&1)w=w*x%MOD;
    return w;
  };

  I n,m,v;std::cin>>n>>m>>v;
  V<A<I,2>>cd(m);for(I i=0;i<m;i++)std::cin>>cd[i][0]>>cd[i][1];
  std::sort(cd.begin(),cd.end());
  cd.erase(std::unique(cd.begin(),cd.end()),cd.end());
  for(I i=1;i<cd.size();i++)if(cd[i][0]==cd[i-1][0]){
    std::cout<<"0\n";
    return;
  }

  if(m==1){
    std::cout<<pw(v*v%MOD,n-1)<<'\n';
    return;
  }
  if(m==n&&cd.size()==m){
    for(I i=1;i<=m;i++)if(cd[i-1][0]!=i)goto no;
    std::cout<<pw(1+(v-1)*v%MOD,n-1)<<'\n';
    return;
    no:;
  }
  
  I w=pw(v*v%MOD,cd[0][0]-1)*pw(v*v%MOD,n-cd.back()[0])%MOD;
  for(I i=0;i+1<cd.size();i++){
    auto l=cd[i],r=cd[i+1];I z=r[0]-l[0]+1;
    I all=pw(v*v%MOD,z-1);
    I lkok=pw(v,z-2);
    I lk=lkok*v%MOD;
    w=w*(all-lk+lkok)%MOD;
  }
  std::cout<<(w+MOD)%MOD<<'\n';
}
#define fio(a,b) freopen("assign."#a,#b,std##a)
int main(){
  fio(in,r);fio(out,w);
  std::cin.tie(0)->sync_with_stdio(0);
  int t;std::cin>>t;while(t--)
  solve();
  return 0;
}
