#include <bits/stdc++.h>
using namespace std;
int arr[200000];
vector<int> tree[600000];
void build_tree(int cur, int l, int r) {
  if (l == r) {
    tree[cur].push_back(arr[l]);
    return;
  }
  int mid = l + (r - l) / 2;
  build_tree(2 * cur + 1, l, mid);
  build_tree(2 * cur + 2, mid + 1, r);
  merge(tree[2 * cur + 1].begin(), tree[2 * cur + 1].end(),
        tree[2 * cur + 2].begin(), tree[2 * cur + 2].end(),
        back_inserter(tree[cur]));
}
int query(int cur, int l, int r, int llim, int rlim, int k) {
  if (r < llim || l > rlim) {
    return 0;
  }
  if (llim <= l && r <= rlim) {
    return tree[cur].end() - lower_bound(tree[cur].begin(), tree[cur].end(), k);
  }
  int mid = l + (r - l) / 2;
  return query(2 * cur + 1, l, mid, llim, rlim, k) +
         query(2 * cur + 2, mid + 1, r, llim, rlim, k);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, k, q, l, r;
  cin >> n >> k >> q;
  priority_queue<int, std::vector<int>, std::greater<int> > lside, rside;
  for (int i = 0; i < n; i++) {
    cin >> l >> r;
    l--;
    r--;
    lside.push(l);
    rside.push(r);
  }
  int curr = 0;
  for (int i = 0; i < 200000; i++) {
    while ((!(lside.empty())) && lside.top() == i) {
      curr++;
      lside.pop();
    }
    arr[i] = curr;
    while ((!(rside.empty())) && rside.top() == i) {
      curr--;
      rside.pop();
    }
  }
  build_tree(0, 0, 199999);
  for (int q0 = 0; q0 < q; q0++) {
    cin >> l >> r;
    cout << query(0, 0, 199999, l - 1, r - 1, k) << endl;
  }
  return 0;
}
