#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int n, m, p;
long long ds[maxn], c[maxn], cnt, ns, num, f[maxn][2];
long long sc[maxn];
vector<long long> g[maxn];
int q[maxn], head, tail, x;
double Y(int i) { return f[i][x ^ 1] + sc[i]; }
double slope(int i, int j) { return (Y(i) - Y(j)) / (i - j); }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m >> p;
  for (int i = 2; i <= n; i++) {
    long long x;
    cin >> x;
    ds[i] = ds[i - 1] + x;
  }
  for (int i = 1; i <= m; i++) {
    int h, t;
    cin >> h >> t;
    c[++cnt] = t - ds[h];
  }
  sort(c + 1, c + cnt + 1);
  for (int i = 1; i <= cnt; i++) sc[i] = sc[i - 1] + c[i];
  memset(f, 100, sizeof(f));
  f[0][1] = f[0][0] = 0;
  for (int j = 1; j <= p; j++) {
    head = tail = 0;
    for (int i = 1; i <= cnt; i++) {
      while (head < tail && slope(q[head + 1], q[head]) <= c[i]) head++;
      int k = q[head];
      f[i][x] = f[k][x ^ 1] - k * c[i] + sc[k] + i * c[i] - sc[i];
      f[i][x] = min(f[i][x], f[i][x ^ 1]);
      while (head < tail && slope(i, q[tail - 1]) < slope(q[tail], q[tail - 1]))
        tail--;
      q[++tail] = i;
    }
    x ^= 1;
  }
  cout << f[cnt][x ^ 1] << '\n';
  return 0;
}
