#include <bits/stdc++.h>
using namespace std;
int n, m, p, d[100010], q[100010];
long long y[2][100010], f[2][100010], pre[100010], sp[100010], sum[100010], c,
    l, r;
struct Cat {
  int h, t;
} a[100010];
inline bool cmp(Cat x, Cat y) { return x.t < y.t; }
int main() {
  scanf("%d%d%d", &n, &m, &p);
  if (p >= m) {
    puts("0");
    return 0;
  }
  d[1] = 0;
  for (int i = 2; i <= n; ++i) {
    scanf("%d", &d[i]);
    d[i] += d[i - 1];
  }
  for (int i = 1; i <= m; ++i) {
    scanf("%d%d", &a[i].h, &a[i].t);
    a[i].t -= d[a[i].h];
  }
  sort(a + 1, a + 1 + m, cmp);
  pre[0] = 0;
  for (int i = 1; i <= m; ++i)
    pre[i] = pre[i - 1] + (long long)a[i].t - a[i - 1].t;
  sum[0] = 0;
  for (int i = 1; i <= m; ++i)
    sum[i] = sum[i - 1] + (long long)(a[i].t - a[i - 1].t) * (i - 1);
  memset(f, 0, sizeof(f));
  memset(y, 0, sizeof(y));
  c = 0;
  for (int i = 1; i <= m; ++i) {
    f[c][i] = sum[i] - sum[1];
    y[c][i] = f[c][i] - sum[i + 1] + pre[i + 1] * i;
  }
  for (int k = 2; k <= p; ++k) {
    c ^= 1;
    q[l = r = 1] = k - 1;
    for (int i = k; i <= m; ++i) {
      while (l < r && (y[c ^ 1][q[l + 1]] - y[c ^ 1][q[l]]) <=
                          pre[i] * (q[l + 1] - q[l]))
        l++;
      f[c][i] = y[c ^ 1][q[l]] - pre[i] * q[l] + sum[i];
      y[c][i] = f[c][i] - sum[i + 1] + pre[i + 1] * i;
      while (l < r && (y[c ^ 1][i] - y[c ^ 1][q[r]]) * (i - q[r - 1]) <=
                          (y[c ^ 1][i] - y[c ^ 1][q[r - 1]]) * (i - q[r]))
        r--;
      q[++r] = i;
    }
  }
  cout << f[c][m] << endl;
  return 0;
}
