#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;   }   