#include <bits/stdc++.h>
using namespace std;
char buf[1 << 21], *p1 = buf, *p2 = buf;
inline int read() {
  char ch;
  bool flag = 0;
  int res;
  while (!isdigit(
      ch = (p1 == p2 &&
                    (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2)
                ? EOF
                : *p1++)))
    (ch == '-') && (flag = true);
  for (res = ch - '0'; isdigit(
           ch = (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin),
                             p1 == p2)
                     ? EOF
                     : *p1++));
       res = res * 10 + ch - '0')
    ;
  (flag) && (res = -res);
  return res;
}
const int N = 100005;
int q[N], h, t, n, m, p, r;
long long dp[2][N], c[N], d[N], sum[N];
inline double slope(int j, int k) {
  return (dp[r ^ 1][j] + sum[j] - dp[r ^ 1][k] - sum[k]) * 1.0 / (j - k);
}
int main() {
  n = read(), m = read(), p = read();
  for (int i = 2; i <= n; ++i) d[i] = read() + d[i - 1];
  for (int i = 1; i <= m; ++i) {
    int h = read(), t = read();
    c[i] = t - d[h];
  }
  sort(c + 1, c + 1 + m);
  for (int i = 1; i <= m; ++i) sum[i] = sum[i - 1] + c[i];
  for (int i = 1; i <= m; ++i) dp[1][i] = c[i] * (i - 1) - sum[i - 1];
  for (int i = 2; i <= p; ++i) {
    r = i & 1;
    h = t = 0;
    for (int i = 1; i <= m; ++i) {
      while (h < t && slope(q[h], q[h + 1]) < c[i]) ++h;
      dp[r][i] = dp[r ^ 1][q[h]] + c[i] * (i - q[h]) - sum[i] + sum[q[h]];
      while (h < t && slope(q[t], q[t - 1]) > slope(q[t], i)) --t;
      q[++t] = i;
    }
  }
  printf("%lld\n", dp[p & 1][m]);
  return 0;
}
