#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-6;
const long long N = 1e5 + 7, P = 101, inf = 1e9;
struct line {
  long long k;
  long long b;
  line() {}
  line(long long _k, long long _b) {
    k = _k;
    b = _b;
  }
  long double get(long double x) { return k * x + b; }
};
long double inter(line l1, line l2) { return (l2.b - l1.b) / (l1.k - l2.k); }
void add(vector<line> &lines, vector<long double> &dots, line l) {
  while (!lines.empty() && dots.back() > inter(lines.back(), l)) {
    lines.pop_back();
    dots.pop_back();
  }
  if (dots.empty())
    dots.push_back(-inf);
  else
    dots.push_back(inter(l, lines.back()));
  lines.push_back(l);
}
long long get(vector<line> &lines, vector<long double> &dots, long double x) {
  long long pos =
      lower_bound((dots).begin(), (dots).end(), x + eps) - dots.begin() - 1;
  return lines[pos].get(x);
}
vector<line> lines[P];
vector<long double> dots[P];
long long a[N], d[N][P], o[N], s[N];
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n, m, p, e, ans = inf, h, t;
  cin >> n >> m >> p;
  for (long long i = 1; i < n; i++) {
    cin >> e;
    a[i] = a[i - 1] + e;
  }
  for (long long i = 0; i < m; i++) {
    cin >> h >> t;
    h--;
    o[i] = (t - a[h]);
  }
  n = m;
  sort(o, o + n);
  for (long long i = 0; i < n; i++) {
    s[i] = o[i];
    if (i) s[i] += s[i - 1];
  }
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < p; j++) {
      d[i][j] = inf;
      if (!j)
        d[i][j] = o[i] * (i + 1) - s[i];
      else {
        d[i][j] = -get(lines[j - 1], dots[j - 1], o[i]) + o[i] * i - s[i];
      }
      line l = {i, -s[i] - d[i][j]};
      add(lines[j], dots[j], l);
    }
  }
  cout << d[n - 1][p - 1];
}
