#include <bits/stdc++.h>
using namespace std;
int n, m, p;
int l, r, q[100010];
long long s[100010], dp[100010][110], a[100010], d[200010];
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 3) + (x << 1) + (ch ^ 48);
    ch = getchar();
  }
  return x * f;
}
int main() {
  n = read(), m = read(), p = read();
  for (int i = (2); i <= (n); ++i) {
    d[i] = d[i - 1] + read();
  }
  for (int i = (1); i <= (m); ++i) {
    int x = read(), y = read();
    a[i] = y - d[x];
  }
  sort(a + 1, a + m + 1);
  for (int i = (1); i <= (m); ++i) {
    s[i] = a[i] + s[i - 1];
    dp[i][1] = a[i] * i - s[i];
  }
  for (int j = (2); j <= (p); ++j) {
    q[l = r = 1] = 0;
    for (int i = (1); i <= (m); ++i) {
      while (l < r &&
             dp[q[l + 1]][j - 1] + s[q[l + 1]] - dp[q[l]][j - 1] - s[q[l]] <=
                 (long long)a[i] * (q[l + 1] - q[l]))
        ++l;
      dp[i][j] = dp[q[l]][j - 1] + a[i] * (i - q[l]) - (s[i] - s[q[l]]);
      while (l < r && (q[r] - q[r - 1]) * (dp[i][j - 1] + s[i] -
                                           dp[q[r]][j - 1] - s[q[r]]) <=
                          (i - q[r]) * (dp[q[r]][j - 1] + s[q[r]] -
                                        dp[q[r - 1]][j - 1] - s[q[r - 1]]))
        --r;
      q[++r] = i;
    }
  }
  printf("%lld\n", dp[m][p]);
  return 0;
}
