#include <bits/stdc++.h>
 
using namespace std;

#define pb push_back
#define mp make_pair
#define ll long long
#define int ll
#define ld long double
#define reps(i,s,n) for(int i=(s);i<(int)(n);i++) 
#define rep(i,n) reps(i,0,n)
#define rreps(i,s,n) for(int i=(int)(s-1);i>=n;i--) 
#define rrep(i,n) rreps(i,n,0)
#define all(v) (v).begin(),(v).end()
#define mset(a,n) memset(a,n,sizeof(a))
#define eras(v,n) (v).erase(remove(all(v),n),(v).end())
#define uni(v) sort(all(v));(v).erase(unique(all(v)),(v).end())
#define bcnt(i)  __builtin_popcount(i)
#define fi first
#define se second
constexpr ll INF = 1e18;
constexpr ll MOD = 1000000007;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
template<class T>T min(vector<T> &v) { return *min_element(v.begin(),v.end()); }
template<class T>T max(vector<T> &v) { return *max_element(v.begin(),v.end()); }
template<class T>T modpow(T a, T b, T m) { a %= m; T r = 1; while (b > 0) { if (b & 1) r = (r * a) % m; a = (a * a) % m; b >>= 1; } return r; }
ll modinv(ll a,ll m=MOD) {ll b = m, u = 1, v = 0;while (b) {ll t = a / b;a -= t * b; swap(a, b);u -= t * v; swap(u, v);}u %= m;if (u < 0) u += m;return u;}
template<class T>string radixconv(T n, T k){ string s; while(n/k){ s=to_string(n%k)+s; n/=k; } s=to_string(n%k)+s; return s; }

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout << fixed << setprecision(11);
    cerr << fixed << setprecision(6);
    int n,m,q;
    cin >> n >> m >> q;
    vector<pair<int,int>> vw(n);
    rep(i,n)cin >> vw[i].se >> vw[i].fi;
    sort(all(vw), [](pair<int,int> a, pair<int,int> b){
        return a.first>b.first|| (a.first==b.first && a.second<b.second);
    });
    vector<pair<int,int>> xi(m);
    rep(i,m)cin >> xi[i].fi,xi[i].se=i;
    sort(all(xi));
    vector<int> ans(q,0);
    rep(i,q){
        int l,r;
        cin >> l >> r;
        l--;r--;
        vector<bool> used(m,0);
        rep(j,n){
            rep(k,m){
                if(l<=xi[k].se&&xi[k].se<=r)continue;
                if(vw[j].se<=xi[k].fi&&!used[xi[k].se]){
                    used[xi[k].se]=1;
                    ans[i]+=vw[j].fi;
                    break;
                }
            }
        }
    }
    rep(i,q)cout << ans[i] << endl;
    return 0;
}


#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("O3")
#pragma GCC optimize ("O2")

#include"bits/stdc++.h"
using namespace std;
const int p = 31;
const int M = 998244353;
typedef long long ll;
typedef long double d;
typedef unsigned long long ull;
typedef int in;
#define ar array
#define ff first
#define ss second
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i : x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif


int main() {
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif

    int n, m, q;
    cin >> n >> m >> q;
    vector<vector<ll>>bag;
    for (int i = 0; i < n; ++i) {
        int w, v;
        cin >> w >> v;
        // bag.push_back({w, v});
        bag.push_back({v, w});

    }

    sort(bag.begin(),bag.end());
    vector<int>box(m);
    for (int i = 0; i < m; ++i)
        cin >> box[i];

    for (int i = 0; i < q; ++i) {
        int l, r;
        cin >> l >> r;
        --l, --r;
        vector<int>tmp;
        for (int j = 0; j < m; ++j) {
            if (j < l || j > r)
                tmp.push_back(box[j]);
        }
        int sz = tmp.size();
        sort(tmp.begin(), tmp.end());
        vector<int>seen(sz);
        ll ans = 0;
        for (int k = n-1; k >=0 ; --k) {
            for (int j = 0; j < sz; ++j) {
                if (seen[j]||tmp[j] < bag[k][1])
                    continue;
                seen[j] = 1;
                ans += bag[k][0];
                break;
            }                                 
        }
        cout << ans << '\n';
    }
    cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n"; //check time

    return 0;
}
