#include #define Int int #define pb emplace_back #define mkp std::make_pair #define pll std::pair typedef long long ll; const int M = 1e5 + 10; const ll mod = 1e9 + 7; 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 << 1) + (x << 3) + (c ^ 48); c = getchar(); } return x * f; } int m; ll n, v; pll c[M]; ll qpow(ll a, ll b) { if(b < 0) return 1; ll res = 1; for(; b; b >>= 1, a = a * a % mod) if(b & 1) res = res * a % mod; return res; } int 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++) c[i].first = read(), c[i].second = read(); // if(T > 7) continue; std::sort(c + 1, c + m + 1); ll ans = 1; ans *= qpow(v, 2 * c[1].first - 2); ans %= mod; for(int i = 1; i < m; i++) { if(c[i].first == c[i + 1].first && c[i].second != c[i + 1].second) { ans = 0; break; } if(c[i].first == c[i + 1].first) continue; if(c[i].first == c[i + 1].first - 1) { ans *= (v * v - v + 1) % mod; ans %= mod; } else { ll l = c[i + 1].first - c[i].first - 1; ans *= ((v * v - v + 1) % mod * qpow(v, l) % mod + qpow(v, l + 2) * (qpow(v, l) - 1) % mod) % mod; ans %= mod; } } ans *= qpow(v, 2 * (n - c[m].first)); ans %= mod; std::cout << ans << '\n'; } return 0; }