#include <bits/stdc++.h>

const int mod = 1e9 + 7;

struct matrix {
  int a[2][2];
  matrix() { memset(a, 0, sizeof(a)); }
  matrix operator * (const matrix &t) const {
    matrix ans;
    for (int i : {0, 1}) for (int j : {0, 1}) for (int k : {0, 1}) 
      (ans.a[i][j] += 1ll * a[i][k] * t.a[k][j] % mod) %= mod;
    return ans;
  }
};

matrix qpow(matrix a, int b) {
  matrix ans;
  ans.a[0][0] = ans.a[1][1] = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans = ans * a;
    a = a * a;
  }
  return ans;
}

void solve() {
  int n, m, v; scanf("%d %d %d", &n, &m, &v);
  std::map<int, int> a;
  std::set<int> s;
  bool ff = 1;
  for (int i = 0, x, y; i < m; i++) {
    scanf("%d %d", &x, &y), --x;
    if (a[x] && a[x] != y) ff = 0;
    a[x] = y;
    s.insert(x);
  }
  if (!ff) return printf("0\n"), void();
  matrix ans;
  // std::vector<std::vector<int>> f(n, std::vector<int>(2));
  if (!a[0]) ans.a[0][0] = 1;
  else ans.a[0][1] = 1;
  matrix x1, x2;
  x1.a[0][0] = 1ll * v * v % mod;
  x1.a[1][0] = 1ll * v * (v - 1) % mod;
  x1.a[1][1] = v;
  x2.a[0][1] = 1ll * v * v % mod;
  x2.a[1][1] = (1 + 1ll * v * (v - 1) % mod) % mod;
  int x = 0;
  for (auto y : s) {
    if (!y) continue;
    ans = ans * qpow(x1, y - x - 1);
    ans = ans * x2;
    x = y;
  }
  ans = ans * qpow(x1, n - x - 1);
  // for (int i = 0; i + 1 < n; i++) {
  //   if (a[i + 1] != 0) {
  //     ans = ans * x2;
  //     // (f[i + 1][1] += 1ll * f[i][1] * (1 + 1ll * (v - 1) * v % mod) % mod) %= mod;
  //     // (f[i + 1][1] += 1ll * f[i][0] * v % mod * v % mod) %= mod;
  //   } else {
  //     ans = ans * x1;
  //     // (f[i + 1][0] += 1ll * f[i][0] * v % mod * v % mod) %= mod;
  //     // (f[i + 1][0] += 1ll * f[i][1] * (v - 1) % mod * v % mod) %= mod;
  //     // (f[i + 1][1] += 1ll * f[i][1] * v % mod) %= mod;
  //   }
  // }
  printf("%d\n", (ans.a[0][0] + ans.a[0][1]) % mod);
}

int main() {
  freopen("assign.in", "r", stdin);
  freopen("assign.out", "w", stdout);
  int T; scanf("%d", &T); while (T--) {
    solve();
  }
}
// start at 9:38
// finish at 10:22
// expected point : 100

/*
现在是 10:24，停下来稍微写点东西。
大概赢了。当 T2 70 分暴力跑过大样例时，狂喜席卷我全身。
现在估分 200，只要 T1 不挂，后面随便写点暴力，女生全国前十大概拿下了吧。
这场怎么那么难啊。不会是绿紫紫紫吧。KDOI 模拟的还真好 /hsh
Qingyu 的博客中曾说，要珍惜自己通过刻苦训练获得的赛场上的时间。但当我真的做到了，还是忍不住要停下来感谢一下帮助过我的人。
谢谢 xht 哥哥，给了我鼓励和训练的方向，让我感受到了被支持。
谢谢 -95 老师，我本以为退役前要一个人走下去了。
谢谢同学们，学弟们，教练们。和你们讨论总是愉快的。
祝你们好运。
272。会赢吗。 
*/
