#include <bits/stdc++.h>
const int maxn = 1e5 + 5, maxk = 105;
int n, m, k, h[maxn], t[maxn];
long long sum[maxn], f[maxk][maxn];
long long Div(int k, int x, int y) {
  return f[k - 1][x] + 1ll * t[y] * (y - x) - sum[y] + sum[x];
}
int head, tail;
struct Int {
  int l, r, p;
  Int(int L = 0, int R = 0, int P = 0) : l(L), r(R), p(P){};
} q[maxn];
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 2; i <= n; ++i) scanf("%d", &h[i]), h[i] += h[i - 1];
  for (int i = 1, p, d; i <= m; ++i) scanf("%d %d", &p, &d), t[i] = d - h[p];
  std ::sort(t + 1, t + m + 1);
  for (int i = 1; i <= m; ++i) sum[i] = sum[i - 1] + t[i];
  memset(f, 0x3f, sizeof(f)), f[0][0] = 0;
  for (int i = 1; i <= k; ++i) {
    q[head = tail = 1] = Int(1, m, 0);
    for (int j = 1, pos; j <= m; ++j) {
      f[i][j] = Div(i, q[head].p, j);
      (q[head].l == q[head].r ? ++head : ++q[head].l), pos = m + 1;
      while (tail >= head &&
             Div(i, q[tail].p, q[tail].l) > Div(i, j, q[tail].l))
        pos = q[tail--].l;
      int l = q[tail].l + 1, r = q[tail].r, ans = q[tail].l;
      while (l <= r) {
        int mid = l + r >> 1;
        if (Div(i, q[tail].p, mid) < Div(i, j, mid))
          ans = mid, l = mid + 1;
        else
          r = mid - 1;
      }
      if (ans ^ q[tail].r) q[tail].r = ans, pos = ans + 1;
      if (pos ^ m + 1) q[++tail] = Int(pos, m, j);
    }
  }
  return printf("%lld\n", f[k][m]), 0;
}
