#include <bits/stdc++.h>
using namespace std;
class ConvexHullTrick {
 public:
  long long M[100100];
  long long B[100100];
  long long I[100100];
  int si, pt;
  ConvexHullTrick() {
    si = 0;
    pt = 0;
  }
  void init() {
    si = 0;
    pt = 0;
  }
  bool bad(int a, int b, int c) {
    return (B[b] - B[a]) * (M[a] - M[c]) >= (B[c] - B[a]) * (M[a] - M[b]);
  }
  void add(long long m, long long b, long long ind) {
    M[si] = m;
    B[si] = b;
    I[si] = ind;
    si++;
    while (si >= 3 && bad(si - 3, si - 2, si - 1)) {
      M[si - 2] = M[si - 1];
      B[si - 2] = B[si - 1];
      I[si - 2] = I[si - 1];
      si--;
    }
    if (pt >= si) pt = si - 1;
  }
  long long query(long long x) {
    if (si == 0) {
      return (1ll << 60);
    }
    if (pt >= si) {
      pt = si - 1;
    }
    while (pt < si - 1 && M[pt + 1] * x + B[pt + 1] < M[pt] * x + B[pt]) {
      pt++;
    }
    return M[pt] * x + B[pt];
  }
};
ConvexHullTrick hull;
int n, m, P;
long long hill[100100];
long long a[100100];
long long acc[100100];
long long DP[100100];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> P;
  long long sum = 0;
  hill[0] = 0;
  for (int i = 1; i < n; i++) {
    long long x;
    cin >> x;
    sum += x;
    hill[i] = sum;
  }
  long long mn = 0;
  for (int i = 1; i <= m; i++) {
    long long h, t;
    cin >> h >> t;
    h--;
    a[i] = t - hill[h];
    mn = min(mn, a[i]);
  };
  mn = abs(mn) + 1;
  for (int i = 1; i <= m; i++) a[i] += mn;
  acc[0] = 0;
  sort(a, a + m + 1);
  for (int i = 1; i <= m; i++) acc[i] = acc[i - 1] + a[i];
  hull.add(0, 0, 0);
  for (int p = P - 1; p >= 0; p--) {
    for (int i = 1; i <= m; i++) {
      DP[i] = hull.query(a[i]) + a[i] * i - acc[i];
    }
    hull.init();
    for (int i = 0; i <= m; i++) {
      hull.add(-i, DP[i] + acc[i], i);
    }
  }
  cout << DP[m] << endl;
  return 0;
}
