#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int N = 1e6 + 9;
int a[N], b[N], c[N], n, m, k;
int p[N];
void add(int a[], int i, int v) {
  i = max(i, 1);
  for (; i < N; a[i] += v, i += -i & i)
    ;
}
int sum(int a[], int i) {
  if (i <= 0) return 0;
  int s = 0;
  for (; i; s += a[i], i -= -i & i)
    ;
  return s;
}
int main() {
  p[0] = 1;
  for (int i = 1; i < N; i++) p[i] = (p[i - 1] * 2) % mod;
  cin >> n >> m >> k;
  k++;
  bool wr = 0;
  for (int i = 0; i < m; i++) {
    int s, t;
    cin >> s >> t;
    if (s + 1 == t) continue;
    int v1 = 0, v2 = 0;
    if (s - k >= 1) v1 = sum(c, s - k);
    v2 = sum(c, n - k) - sum(c, t - 1);
    if (t - s != k || v1 + v2) {
      wr = 1;
      break;
    }
    add(c, s, 1);
    add(b, s, -1);
    add(b, s + 1, 1);
    int end = s - k;
    if (end >= 1) {
      add(b, 1, -1);
      add(b, end + 1, 1);
    }
    if (t <= n - k) {
      add(b, t, -1);
      add(b, n - k + 1, 1);
    }
  }
  if (wr) return puts("0"), 0;
  if (n + 1 == k) return puts("1"), 0;
  add(b, 1, 1);
  add(b, n - k + 1, -1);
  for (int i = 1; i <= n; i++) {
    int v = sum(b, i);
    if (v == 1) add(a, i, 1);
  }
  long long ans = 1;
  for (int i = 1; i <= n - k; i++)
    if (sum(a, i) - sum(a, i - 1)) {
      ans = (ans + p[sum(a, i + k - 1) - sum(a, i)]) % mod;
    }
  cout << ans << endl;
  return 0;
}
