#include <bits/stdc++.h>
using namespace std;
int freq[200005];
int sgtree[200005 * 5], lazy[200005 * 5];
void update(int node, int l, int r, int ql, int qr) {
  if (l == r) {
    sgtree[node] += lazy[node] + 1;
    lazy[node] = 0;
  } else {
    if (l >= ql && r <= qr)
      lazy[node]++;
    else {
      if (lazy[node]) {
        lazy[node * 2] += lazy[node];
        lazy[node * 2 + 1] += lazy[node];
        lazy[node] = 0;
      }
      int mid = (l + r) / 2;
      if (mid >= ql) update(node * 2, l, mid, ql, qr);
      if (mid + 1 <= qr) update(node * 2 + 1, mid + 1, r, ql, qr);
    }
  }
}
int ne[200005];
void finda(int node, int l, int r) {
  if (l == r) {
    sgtree[node] += lazy[node];
    ne[l] = sgtree[node];
  } else {
    if (lazy[node]) {
      lazy[node * 2] += lazy[node];
      lazy[node * 2 + 1] += lazy[node];
      lazy[node] = 0;
    }
    int mid = (l + r) / 2;
    finda(node * 2, l, mid);
    finda(node * 2 + 1, mid + 1, r);
  }
}
int sg2[200005 * 4];
int k;
void build2(int node, int l, int r) {
  if (l == r)
    sg2[node] = (ne[l] >= k) ? 1 : 0;
  else {
    int mid = (l + r) / 2;
    build2(node * 2, l, mid);
    build2(node * 2 + 1, mid + 1, r);
    sg2[node] = sg2[node * 2] + sg2[node * 2 + 1];
  }
}
int query(int node, int l, int r, int ql, int qr) {
  if (l >= ql && r <= qr)
    return sg2[node];
  else {
    int mid = (l + r) / 2;
    int q1 = 0, q2 = 0;
    if (mid >= ql) q1 = query(node * 2, l, mid, ql, qr);
    if (mid + 1 <= qr) q2 = query(node * 2 + 1, mid + 1, r, ql, qr);
    return q1 + q2;
  }
}
int main() {
  int n, q;
  scanf("%d%d%d", &n, &k, &q);
  for (int i = 0; i < n; i++) {
    int l, r;
    scanf("%d %d", &l, &r);
    update(1, 0, 200001, l, r);
  }
  finda(1, 0, 200001);
  build2(1, 0, 200001);
  for (int i = 0; i < q; i++) {
    int l, r;
    scanf("%d %d", &l, &r);
    int ans = query(1, 0, 200001, l, r);
    printf("%d\n", ans);
  }
  return 0;
}
