#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 4;
long long starts[N], pref[N];
long long C(int i, int j) {
  if (j < i) return 0;
  return starts[j] * (j - i + 1) - pref[j] + (i ? pref[i - 1] : 0);
}
vector<long long> dp_before, dp_cur;
void compute(int l, int r, int optl, int optr) {
  if (l > r) return;
  int mid = (l + r) >> 1;
  pair<long long, int> best = {LLONG_MAX, -1};
  for (int k = optl; k <= min(mid, optr); k++) {
    best = min(best, {dp_before[k] + C(k + 1, mid), k});
  }
  dp_cur[mid] = best.first;
  int opt = best.second;
  compute(l, mid - 1, optl, opt);
  compute(mid + 1, r, opt, optr);
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n, m, p;
  cin >> n >> m >> p;
  vector<int> d(n);
  d[0] = 0;
  for (int i = 1; i < n; ++i) {
    cin >> d[i];
    d[i] += d[i - 1];
  }
  for (int i = 0; i < m; ++i) {
    int h, t;
    cin >> h >> t;
    starts[i] = t - d[h - 1];
  }
  sort(starts, starts + m);
  pref[0] = starts[0];
  for (int i = 1; i < m; ++i) pref[i] = starts[i] + pref[i - 1];
  dp_before.resize(m);
  for (int i = 0; i < m; ++i) dp_before[i] = C(0, i);
  dp_cur.resize(m);
  for (int i = 2; i <= p; ++i) {
    compute(0, m - 1, 0, m - 1);
    dp_before = dp_cur;
  }
  cout << dp_before[m - 1] << "\n";
}
