#include <bits/stdc++.h>
const long long Q = 100005;
const long long P = 105;
const long long INF = (1ll << 60);
inline bool ig(char c) { return c >= 48 && c <= 57; }
inline void read(long long &oi) {
  char c;
  long long f = 1, res = 0;
  while (c = getchar(), (!ig(c)) && c ^ '-')
    ;
  c ^ '-' ? res = (c ^ 48) : f = -1;
  while (c = getchar(), ig(c)) res = res * 10 + (c ^ 48);
  oi = f * res;
}
inline void print(long long oi) {
  if (oi < 0) putchar('-'), oi = ~oi + 1;
  if (oi > 9) print(oi / 10);
  putchar(oi % 10 + 48);
}
inline void write(long long oi, char c) {
  print(oi);
  putchar(c);
}
inline long long minn(long long x, long long y) { return x < y ? x : y; }
long long n, m, p, t[Q], s[Q], sum[Q];
long long f[2][Q];
long long q[Q], l, r, pre, now;
inline long long Y(long long x) { return sum[x] + f[pre][x]; }
inline long long X(long long x) { return x; }
inline long long K(long long x) { return t[x]; }
inline double slope(long long x, long long y) {
  return 1.0 * (Y(y) - Y(x)) / (X(y) - X(x));
}
signed main() {
  read(n);
  read(m);
  read(p);
  for (register long long i = 2; i <= n; ++i) read(s[i]), s[i] += s[i - 1];
  for (register long long i = 1, x; i <= m; ++i)
    read(x), read(t[i]), t[i] -= s[x];
  std::sort(t + 1, t + 1 + m);
  for (register long long i = 1; i <= m; ++i) sum[i] = sum[i - 1] + t[i];
  std::memset(f, 0x7f, sizeof(f));
  f[0][0] = 0;
  for (register long long i = 1; i <= p; ++i) {
    q[l = r = 1] = 0;
    pre = now;
    now ^= 1;
    for (register long long j = 1; j <= m; ++j) {
      while (l < r && slope(q[l + 1], q[l]) < K(j)) ++l;
      f[now][j] = f[pre][q[l]] + t[j] * (j - q[l]) - (sum[j] - sum[q[l]]);
      while (l < r && slope(q[r], q[r - 1]) > slope(j, q[r])) --r;
      q[++r] = j;
    }
  }
  write(f[now][m], '\n');
  return 0;
}
