#include <bits/stdc++.h>
using namespace std;
int n, m, k;
bool out[1000000];
int cnt[1000000 + 1];
int sum[1000000 + 1];
long long two[1000000 + 1];
const long long MOD = 1000000007;
void init() {
  two[0] = 1;
  for (int i = (int)(1); i < (int)(1000000 + 1); i++)
    two[i] = 2 * two[i - 1] % MOD;
}
int main() {
  init();
  cin >> n >> m >> k;
  ++k;
  for (int i = 0; i < (int)(m); i++) {
    int u, v;
    cin >> u >> v;
    --u, --v;
    if (v - u == 1) continue;
    if (v - u == k)
      out[u] = true;
    else {
      puts("0");
      return 0;
    }
  }
  for (int i = 0; i < n; i++) {
    cnt[i + 1] = cnt[i];
    if (out[i]) ++cnt[i + 1];
  }
  for (int i = 0; i < (int)(n - k); i++) {
    if (out[i] && cnt[n] - cnt[i + k] > 0) {
      puts("0");
      return 0;
    }
  }
  long long ret = 1;
  for (int i = 0; i < (int)(n); i++) {
    sum[i + 1] = sum[i];
    if (out[i]) continue;
    if (i + k >= n || cnt[n] - cnt[i + k] > 0) continue;
    if (i - k && cnt[i - k + 1]) continue;
    ++sum[i + 1];
  }
  for (int i = 0; i < (int)(n - k); i++) {
    if (sum[i + 1] - sum[i] == 0) continue;
    int c = sum[i + k] - sum[i + 1];
    ret = (ret + two[c]) % MOD;
  }
  cout << ret << endl;
  return 0;
}
