#include <bits/stdc++.h>
using namespace std;
#define rep(i,N) for(int i=0;i<int(N);++i)
#define rep1(i,N) for(int i=1;i<int(N);++i)
#define all(a) (a).begin(),(a).end()
#define print(v) { cerr<<#v<<": [ "; for(auto _ : v) cerr<<_<<", "; cerr<<"]"<<endl; }
#define printpair(v) { cerr<<#v<<": [ "; for(auto _ : v) cerr<<"{"<<_.first<<","<<_.second<<"}"<<", "; cerr<<"]"<<endl; }
#define dump(x) cerr<<#x<<": "<<x<<endl;
#define bit(k) (1LL<<(k))
typedef long long ll;
typedef pair<int, int> i_i;
typedef pair<ll, ll> l_l;
template <class T> using vec = vector<T>;
template <class T> using vvec = vector<vec<T>>;
template< typename T1, typename T2 >
ostream &operator<<(ostream &os, const pair< T1, T2 >& p) {
  os << "{" <<p.first << ", " << p.second << "}";
  return os;
}
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }

const int INF = (ll)1e9;
const ll INFLL = (ll)1e18+1;
const ll MOD = (ll)1e9+7;
const double PI = acos(-1.0);
/*
const int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
const int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
const string dir = "DRUL";
*/
template<typename T>
class BIT{
  public:
    int N;
    vector<T> data;
    BIT(T _N):N(_N){
        data.assign(N+1, 0);
    };
    
    // a is 1-indexed
    void add(int a, T w){
        for(int x = a; x <= N; x += x & -x)data[x] += w;
    }
    // 1-indexed sum of prefix [0, a]
    T sum(int a){
        T res = 0;
        for(int x = a; x > 0; x -= x & -x)res += data[x];
        return res;
    }
    // 1-indexed sum of range [l, r]
    T sum(int l, int r){return sum(r) - sum(l-1);}

    // 0-indexed add
    void add0(int a, T w){add(a + 1, w);}
    // 0-indexed sum
    T sum0(int a){return sum(a + 1);}
    // 0-indexed sum of range
    T sum0(int l, int r){return sum0(r) - sum0(l-1);}
    // show the value
    void debug(){
        vector<T> tmp(N);
    }
    // k-th number (k is 1 - indexed)
    T get(int k){
        T res = 0;
        int sz = 1;
        while(sz < (int)data.size()) sz <<= 1;
        for(int i = sz / 2; i > 0; i >>= 1){
            if(res + i <= N && data[res + i] < k){
                k -= data[res + i];
                res += i;
            }
        }
        return res + 1;
    }
};
struct Section{
    int l;
    int r;
    int type;
    int idx;
    Section(int l_, int r_, int type_, int idx_):l(l_), r(r_), type(type_), idx(idx_){};
    bool operator<(const Section& b){
        if(r < b.r)return true;
        else if(r == b.r) {
            if(type < b.type)return true;
            else if(type == b.type){
                return l < b.l;
            }
            else{
                return false;
            }
        }
        else return false;
    }
};
int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(20);

    int N, M, Q;
    cin >> N >> M >> Q;
    vector<Section> Sections;
    rep(i,M){
        int l, r;
        cin >> l >> r;
        Section x(l, r, 0, -1);
        Sections.push_back(x);
    }
    rep(i,Q){
        int l, r;
        cin >> l >> r;
        Section y(l, r, 1, i);
        Sections.push_back(y);
    }
    sort(all(Sections));
    /*
    rep(i,M+Q){
        cerr << Sections[i].l << " " << Sections[i].r << " " << Sections[i].type << endl;
    }*/
    BIT<ll> B(1000);
    vector<int> ans(Q);
    rep(i,M+Q){
        if(Sections[i].type){
            ans[Sections[i].idx] =  B.sum(Sections[i].l, Sections[i].r);
        }
        else{
            B.add(Sections[i].l, 1);
        }
    }
    rep(i,Q){
        cout << ans[i] << endl;
    }
}

Measured memory_bytes: 10604