import std.stdio, std.string, std.range, std.conv, std.array, std.algorithm, std.math, std.typecons, std.functional;

void main() {
    auto tmp = readln.split.to!(long[]);
    auto N = tmp[0], M = tmp[1], Q = tmp[2];
    auto beginList = new long[][N];
    auto endList = new long[][N];
    foreach (i; 0..M) {
        tmp = readln.split.to!(long[]);
        auto L = tmp[0]-1, R = tmp[1]-1;
        beginList[L] ~= i;
        endList[R] ~= i;
    }
    long ans(long begin, long end) {
        if (begin == 0 && end == N-1) return M;
        if (begin == 0) return memoize!ans(begin, end+1) - endList[end+1].length;
        return memoize!ans(begin-1, end) - beginList[begin-1].length;
    }
    long[] ansList;
    foreach (i; 0..Q) {
        tmp = readln.split.to!(long[]);
        auto p = tmp[0]-1, q = tmp[1]-1;
        ansList ~= memoize!ans(p,q);
    }
    foreach (i; 0..Q) {
        writeln(ansList[i]);
    }
}

