#include <iostream>
#include <cmath>
#include <vector>
#include <cstdio>
#include <iomanip>
#include <algorithm>
#include <algorithm>

using namespace std;

int main() {
	int n,m,q;
	cin>>n>>m>>q;

	vector<pair<int,int>> cargos_base;
	for(int i=0;i<n;i++){
		int buf_w,buf_v;
		cin>>buf_w>>buf_v;
		std::pair<int,int> p = std::make_pair(buf_v,buf_w);
		cargos_base.push_back(p);
	}
	sort(cargos_base.begin(),cargos_base.end());

	vector<int> allBoxes;
	for(int i=0;i<m;i++){
		int buf_x;
		cin>>buf_x;
		allBoxes.push_back(buf_x);
	}

	for(int iq=0;iq<q;iq++){
		int l,r;
		cin>>l>>r;

		vector<int> boxes;
		//cout<<"usable : ";
		for(int i=0;i<l-1;i++){
			boxes.push_back(allBoxes[i]);
			//cout<<allBoxes[i]<<" ";
		}
		for(int i=r;i<m;i++){
			boxes.push_back(allBoxes[i]);
			//cout<<allBoxes[i]<<" ";
		}
		sort(boxes.begin(),boxes.end());

		vector<pair<int,int>> cargos(cargos_base);
		int shipped = 0;
		while(!boxes.empty() && !cargos.empty()){
			pair<int,int> cargo = cargos.back();
			cargos.pop_back();

			int value = cargo.first;
			int weight = cargo.second;
			
			for(auto ibox=boxes.begin();ibox!=boxes.end();ibox++){
				int size = *ibox;
				if(weight<=size){
					shipped+=value;
					boxes.erase(ibox);
					break;
				}
			}
			
		}

		cout<<shipped<<endl;
		
	}

	return 0;
	
}

#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
typedef long long ll;
typedef long double ld;
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define mod 1000000007
#define pii pair<ll,ll>
#define inf 1000000000000000000
#define bpc(x) __builtin_popcountll(x)
#define autoit(x,it) for(auto it = x.begin(); it != x.end(); it++)
#define autoitr(x,it) for(auto it = x.rbegin(); it != x.rend(); it++)
#define rep(n) for(ll i = 0; i < n; i++)
#define repi(i,n) for(ll i = 0; i < n; i++)

#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
using namespace __gnu_pbds; 

#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update> 

using namespace std;
mt19937_64 mt(chrono::steady_clock::now().time_since_epoch().count());

int main()
{
  FAST/**/
  
  ll n,m,q;
  cin>>n>>m>>q;
  
  pii arr[n];
  rep(n)
        cin>>arr[i].ff>>arr[i].ss, swap(arr[i].ff, arr[i].ss);
  sort(arr, arr+n);
  ll lim[m];
  rep(m)
        cin>>lim[i];
          
  rep(q)
  {
      ll l,r;
      cin>>l>>r;
      ll m1 = m - (r-l+1);
      multiset<ll> box;
      for(ll i=0;i<m;i++)
            if(i<l-1 || i>=r)
                box.insert(lim[i]);
      ll ans = 0;            
      for(ll i=n-1;i>-1;i--)
      {
          auto it = box.lower_bound(arr[i].ss);
          if(it == box.end())
                continue;
          ans+=arr[i].ff;
          box.erase(it);
      }
      cout<<ans<<'\n';
      
  }
  
  
  return 0;
}
   
   
 