#include <bits/stdc++.h>
using namespace std;
int const maxn = 200000 + 5;
int lx[4 * maxn];
int tree[4 * maxn];
int n = 200000, m, k;
void pushdown(int n) { lx[2 * n] += lx[n], lx[2 * n + 1] += lx[n], lx[n] = 0; }
void update(int n, int l, int r, int begin, int end) {
  if (l >= begin && r <= end)
    lx[n] += 1;
  else {
    int mid = (l + r) / 2;
    if (mid >= begin) update(n * 2, l, mid, begin, end);
    if (mid + 1 <= end) update(n * 2 + 1, mid + 1, r, begin, end);
  }
}
void gettree(int n, int l, int r) {
  if (l == r) {
    if (lx[n] >= k)
      tree[n] = 1;
    else
      tree[n] = 0;
  } else {
    if (lx[n]) pushdown(n);
    int mid = (l + r) / 2;
    gettree(n * 2, l, mid);
    gettree(n * 2 + 1, mid + 1, r);
    tree[n] = tree[n * 2] + tree[n * 2 + 1];
  }
}
int query(int n, int l, int r, int begin, int end) {
  if (l >= begin && r <= end)
    return tree[n];
  else {
    int mid = (l + r) / 2;
    int t1 = 0, t2 = 0;
    if (mid >= begin) t1 = query(n * 2, l, mid, begin, end);
    if (mid + 1 <= end) t2 = query(n * 2 + 1, mid + 1, r, begin, end);
    return t1 + t2;
  }
}
int main() {
  int t;
  scanf("%d%d%d", &t, &k, &m);
  for (int i = 1; i <= t; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    update(1, 1, n, l, r);
  }
  gettree(1, 1, n);
  for (int i = 1; i <= m; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    printf("%d\n", query(1, 1, n, l, r));
  }
  return 0;
}
