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

int main(){
  int N,M; cin >> N >> M;
  if(M==0){
    cout << 1 << endl;
  }else{
    vector<int> A(M), S(M+1);
    int k=N;
    for(int i=0; i<M; i++) cin >> A[i];
    sort(A.begin(),A.end());
    for(int i=0; i<M; i++){
      if(i==0){
        S[0]=A[0]-1;
        if(S[0]>0) k=min(k,S[0]);
      }else{
        S[i]=A[i]-A[i-1]-1;
        if(S[i]>0) k=min(k,S[i]);
        if(i==M-1){
          S[M]=N-A[M-1];
          if(S[M]>0) k=min(k,S[M]);
        }
      }
    }
    int result=0;
    for(int i=0; i<=M; i++){
      result+=((S[i]+k-1)/k);
    }
    cout << result << endl;
  }
}
#include <bits/stdc++.h>
using namespace std;
using ll = int64_t;
using pl = pair<ll, ll>;
using vl = vector<ll>;
using vp = vector< pair<ll, ll> >;
using vvl = vector<vl>;
using vs = vector<string>;
#define pi 3.14159265359;
#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define rep2(i, s, n) for (ll i = (ll)(s); i < (ll)(n); i++)
#define rep3(i, s, n) for (ll i = (ll)(n); i >= (ll)(s); i--)
#define all(v) v.begin(), v.end()
template<class T> void chmax(T& a, T b) {
    if (a < b) a = b;
}
template<class T> void chmin(T& a, T b) {
    if (a > b) a = b;
}

ll binary_search2(ll key, vl vec) {
    ll left = 0, right = vec.size() - 1;
    while (right >= left) {
        ll mid = left + (right - left) / 2;
        if (vec[mid] == key) return mid;
        else if (vec[mid] > key) right = mid - 1;
        else left = mid + 1;
    }
    return left;
}

ll search(ll key, vl vec) {
    rep(i, vec.size()) {
        if (key <= vec[i]) return i;
    }
    return -1;
}

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

    vp vw(n);
    rep(i, n) cin >> vw[i].second >> vw[i].first;
    sort(vw.begin(), vw.end(), greater<pl>());

    vl x(m);
    rep(i, m) cin >> x[i];

    vp lr(q);
    rep(i, q) cin >> lr[i].first >> lr[i].second;

    rep(i, q) {
        vl ex(0);
        rep(j, m) {
            if (j < lr[i].first - 1 || j > lr[i].second - 1) {
                ex.push_back(x[j]);
            }
        }
        sort(all(ex));

        ll len = ex.size();
        vector<bool> used(len, true);
        ll ansi = 0;

        rep(a, n) {
            if (ex.size() == 0) break;
            
            ll value = vw[a].first;
            ll weight = vw[a].second;

            rep(b, len) {
                if (weight <= ex[b] && used[b]) {
                    ansi += value;
                    used[b] = false;
                    break;
                }
            }
        }

        cout << ansi << endl;
    }
}