#include <bits/stdc++.h>
using namespace std;
int d[100005], arr[100005];
long long st[100005];
int cur[105];
vector<pair<long long, long long> > line[105];
vector<pair<double, double> > v[105];
double intersect(pair<long long, long long> a, pair<long long, long long> b) {
  return ((a.second - b.second) * 1.0) / (b.first - a.first);
}
void insert(vector<pair<double, double> > &v,
            vector<pair<long long, long long> > &line,
            pair<long long, long long> ln) {
  double x;
  while (v.size() &&
         (x = intersect(line[line.size() - 1], ln)) <= v[v.size() - 1].first) {
    line.pop_back();
    v.pop_back();
  }
  if (!v.size())
    v.push_back(pair<double, double>(-(1e50), (1e50)));
  else {
    v[v.size() - 1].second = x;
    v.push_back(pair<double, double>(x, (1e50)));
  }
  line.push_back(ln);
}
long long fval(vector<pair<double, double> > &v,
               vector<pair<long long, long long> > &line, long long x,
               int &cur) {
  cur = min(cur, (int)v.size() - 1);
  while (v[cur].second < x) cur++;
  return (line[cur].first * x + line[cur].second);
}
int main() {
  int t, h, n, m, p, i, j, k;
  scanf("%d%d%d", &n, &m, &p);
  for (i = 1; i < n; i++) {
    scanf("%d", &d[i]);
    d[i] += d[i - 1];
  }
  for ((i) = 0; (i) < (m); (i)++) {
    scanf("%d%d", &h, &t);
    arr[i] = t - d[h - 1];
  }
  sort(arr, arr + m);
  st[0] = arr[0];
  for (i = 1; i < m; i++) {
    st[i] = st[i - 1] + arr[i];
  }
  long long ans;
  for ((i) = 0; (i) < (m); (i)++) {
    insert(v[0], line[0],
           pair<long long, long long>(-i, (i * 1LL + 1) * arr[i]));
    for (j = 1; j < p; j++) {
      ans = fval(v[j - 1], line[j - 1], arr[i], cur[j - 1]);
      ans += (i * 1LL) * arr[i] - st[i];
      insert(v[j], line[j], pair<long long, long long>(-i, ans + st[i]));
    }
  }
  cout << ans << endl;
  return 0;
}
