#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  char c = getchar();
  T fh = 0;
  bool f = false;
  while (!isdigit(c)) f |= (c == '-'), c = getchar();
  while (isdigit(c)) fh = (fh << 1) + (fh << 3) + (c ^ 48), c = getchar();
  x = f ? -fh : fh;
  return;
}
const int N = 1e5 + 5;
long long d[N], a[N], f[105][N], q[N], s[N], g[N];
int n, m, p;
int main() {
  long long h, t, ans = LLONG_MAX;
  read(n), read(m), read(p);
  for (int i = (2); i <= (n); ++i) read(t), d[i] = d[i - 1] + t;
  for (int i = (1); i <= (m); ++i) read(h), read(t), a[i] = t - d[h];
  sort(a + 1, a + m + 1);
  for (int i = (1); i <= (m); ++i) s[i] = s[i - 1] + a[i];
  memset(f, 0x3f, sizeof(f));
  f[0][0] = 0;
  for (int i = (1); i <= (p); ++i) {
    int l = 1, r = 1;
    q[l] = 0;
    for (int j = (1); j <= (m); ++j) g[j] = f[i - 1][j] + s[j];
    for (int j = (1); j <= (m); ++j) {
      while (l < r && g[q[l + 1]] - g[q[l]] <= a[j] * (q[l + 1] - q[l])) ++l;
      f[i][j] = (f[i][j] < f[i - 1][q[l]] + a[j] * (j - q[l]) - s[j] + s[q[l]]
                     ? f[i][j]
                     : f[i - 1][q[l]] + a[j] * (j - q[l]) - s[j] + s[q[l]]);
      if (g[j] >= 0x3f3f3f3f3f3fll) continue;
      while (l < r && (g[q[r]] - g[q[r - 1]]) * (j - q[r]) >=
                          (g[j] - g[q[r]]) * (q[r] - q[r - 1]))
        --r;
      q[++r] = j;
    }
    ans = (ans < f[i][m] ? ans : f[i][m]);
  }
  cout << ans;
  return 0;
}
