#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
const int P = 1e2;
int n, m, p, d[N + 10], a[N + 10];
long long s[N + 10];
long long dp[P + 10][N + 10];
int dl[N + 10], head, tail;
double ju(int i, int x, int y) {
  return (1.0) * (dp[i - 1][y] + s[y] - (dp[i - 1][x] + s[x])) /
         (1.0 * (y - x));
}
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 2; i <= n; i++) {
    scanf("%d", &d[i]);
    d[i] += d[i - 1];
  }
  for (int i = 1; i <= m; i++) {
    int h, t;
    scanf("%d%d", &h, &t);
    a[i] = t - d[h];
  }
  sort(a + 1, a + 1 + m);
  for (int i = 1; i <= m; i++) s[i] = s[i - 1] + a[i];
  for (int i = 0; i <= p; i++)
    for (int j = 1; j <= m; j++) dp[i][j] = 1e17;
  dp[0][0] = 0;
  for (int i = 1; i <= p; i++) {
    head = 1, tail = 1;
    dl[1] = 0;
    for (int j = 1; j <= m; j++) {
      while (head < tail && ju(i, dl[head], dl[head + 1]) < a[j]) head++;
      dp[i][j] =
          min(dp[i][j], dp[i - 1][dl[head]] + 1LL * a[j] * (j - dl[head]) -
                            (s[j] - s[dl[head]]));
      while (head < tail && ju(i, dl[tail - 1], dl[tail]) > ju(i, dl[tail], j))
        tail--;
      dl[++tail] = j;
    }
  }
  printf("%lld\n", dp[p][m]);
  return 0;
}
