#include <bits/stdc++.h>
using namespace std;
int a[200000 + 1];
struct info {
  int sum, prop;
} t[3 * 200000 + 3];
void build(int node, int b, int e) {
  if (b >= e) {
    if (b == e) t[node].sum = a[b];
    return;
  }
  int left = node << 1;
  int right = left | 1;
  int mid = (b + e) >> 1;
  build(left, b, mid);
  build(right, mid + 1, e);
  t[node].sum = t[left].sum + t[right].sum;
}
void update(int node, int b, int e, int i, int j) {
  if (i > e || j < b) return;
  if (b > e) return;
  if (b >= i && e <= j) {
    t[node].sum += ((e - b + 1) * 1);
    t[node].prop += 1;
    return;
  }
  int left = node << 1;
  int right = left | 1;
  int mid = (b + e) >> 1;
  update(left, b, mid, i, j);
  update(right, mid + 1, e, i, j);
  t[node].sum = t[left].sum + t[right].sum + (e - b + 1) * t[node].prop;
}
int query(int node, int b, int e, int pos, int carry = 0) {
  if (pos < b || e < pos) return 0;
  if (b > e) return 0;
  if (b == pos && pos == e) return t[node].sum + carry * (e - b + 1);
  int left = node << 1;
  int right = left | 1;
  int mid = (b + e) >> 1;
  int p1 = query(left, b, mid, pos, carry + t[node].prop);
  int p2 = query(right, mid + 1, e, pos, carry + t[node].prop);
  return p1 + p2;
}
int chk[200000 + 1];
int main() {
  int n, k, q, i, l, r;
  cin >> n >> k >> q;
  for (i = 0; i < n; i++) {
    scanf("%d %d", &l, &r);
    update(1, 1, 200000, l, r);
  }
  for (i = 1; i <= 200000; i++) {
    if (query(1, 1, 200000, i) >= k) chk[i] = 1;
  }
  for (i = 1; i <= 200000; i++) chk[i] += chk[i - 1];
  for (i = 0; i < q; i++) {
    scanf("%d %d", &l, &r);
    cout << chk[r] - chk[l - 1] << endl;
  }
  return 0;
}
