#include <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0;i<(n);i++)
#define N 1000
#define INF 1000000005
#define INFLL (ll)1000000000000000005
#define PI 3.1415926535897
typedef long long ll;
#define ALL(v) (v).begin(),(v).end()
#define SZ(x) int(x.size())
#define IN(a) cin>>(a)
#define OUT(a) cout<<(a)<<endl
#define per(a,mod) ((a)%(mod)+(mod))%(mod)
typedef pair<int,int> P;
const int MAX = (1<<20);
const int MOD = 1000000007;


void solve(){
    int n,m,Q;
    cin>>n>>m>>Q;
    vector<P>w(n);
    REP(i,n)cin>>w[i].second>>w[i].first;
    vector<int>x(m);
    REP(i,m)cin>>x[i];
    sort(ALL(w));
    reverse(ALL(w));
    vector<P>r(Q);
    REP(i,Q){
        cin>>r[i].first>>r[i].second;
        r[i].first--;r[i].second--;
    }
    REP(t,Q){
        vector<int>tmp;
        REP(i,m){
            if(r[t].first<=i&&i<=r[t].second)continue;
            tmp.push_back(x[i]);
        }
        //cout<<SZ(tmp)<<"T"<<endl;
        sort(ALL(tmp));
        map<int,int>mp;
        ll cnt=0;
        if(SZ(tmp)==0){
            OUT(0);
            continue;
        }
        REP(i,n){
            int p=lower_bound(ALL(tmp),w[i].second)-tmp.begin();
            if(p==SZ(tmp))continue;
            while(p<SZ(tmp)&&mp[p]>0)p++;
            if(p==SZ(tmp))continue;
            cnt+=w[i].first;
            mp[p]++;
            //cout<<p<<" ";
        }
        //cout<<endl;
        OUT(cnt);
    }
}
int main(){
    solve();
    return 0;
}

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <iomanip>
#include <cstdio>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <cstdlib>
#include <queue>
#include <stack>
#include <bitset>

using namespace std;

#define MOD 1000000007
#define PI 3.1415926535897932
#define INF 1e9
#define rep(i, n) for (int i = 0; i < n; i++)
#define repe(i, j, n) for (int i = j; i < n; i++)
#define repi(i, n) for (int i = 0; i <= n; i++)
#define repie(i, j, n) for (int i = j; i <= n; i++)
#define all(x) x.begin(), x.end()
#define println() cout << endl
#define P pair<int, int>
#define fi first
#define se second
typedef long long ll;
using Graph = vector<vector<ll>>;


bool bf(P a, P b) {
    if(a.se == b.se) {
        return a.fi < b.fi;
    } else {
        return a.se > b.se;
    }
}

void solve1() {
    ll n, m, q; cin >> n >> m >> q;
    vector<P> wv(n);
    rep(i, n) {
        cin >> wv[i].fi >> wv[i].se;
    }

    vector<ll> x(m);
    rep(i, m) {
        cin >> x[i];
    }

    sort(all(wv), bf);
    vector<ll> anss(q);
    rep(i, q) {
        ll ans = 0;
        ll l, r; cin >> l >> r;

        vector<ll> nw;
        rep(j, m) {
            if(j+1 >= l && j+1 <= r) {
                continue;
            }
            nw.push_back(x[j]);
        }

        sort(all(nw));
        vector<bool> fs(n, true);
        for(int j = 0; j < nw.size(); j++) {
            for(int k = 0; k < n; k++) {
                if(fs[k] && wv[k].fi <= nw[j]) {
                    ans += wv[k].se;
                    fs[k] = false;
                    break;
                }
            }
        }

        anss[i] = ans;
    }

    rep(i, q) {
        cout << anss[i] << endl;
    }
}

int main()
{
    solve1();
}
