#include <bits/stdc++.h>
using namespace std;
const long long INF = 1LL << 61;
const int N = 1e5 + 5, P = 100 + 3;
int n, m, p, d[N], a[N];
long long s[N], f[P][N];
long long getx(const pair<long long, long long> &i,
               const pair<long long, long long> &j) {
  return 1.0 * (j.second - i.second) / (i.first - j.first);
}
long long gety(const pair<long long, long long> &i, const long long &x) {
  return i.first * x + i.second;
}
int main() {
  cin >> n >> m >> p;
  for (int i = (int)(2), _b = (int)(n); i <= _b; ++i) {
    cin >> d[i];
    d[i] += d[i - 1];
  }
  for (int i = (int)(1), _b = (int)(m); i <= _b; ++i) {
    int h, t;
    cin >> h >> t;
    a[i] = t - d[h];
  }
  sort(a + 1, a + m + 1);
  for (int i = (int)(1), _b = (int)(m); i <= _b; ++i) s[i] = s[i - 1] + a[i];
  for (int i = (int)(1), _b = (int)(m); i <= _b; ++i) f[0][i] = INF;
  for (int i = (int)(1), _b = (int)(p); i <= _b; ++i) {
    deque<pair<pair<long long, long long>, long long> > de;
    for (int j = (int)(0), _b = (int)(m); j <= _b; ++j) {
      long long t = -INF;
      pair<long long, long long> cur(-j, f[i - 1][j] + s[j]);
      while (de.size()) {
        t = getx(de.back().first, cur);
        if (de.back().second <= t) break;
        de.pop_back();
      }
      de.push_back(make_pair(cur, t));
      if (!j) continue;
      while (de.size() > 1 && de[1].second <= a[j]) de.pop_front();
      f[i][j] = gety(de[0].first, a[j]) + 1LL * a[j] * j - s[j];
    }
  }
  cout << f[p][m] << endl;
  return 0;
}
