#include <bits/stdc++.h>
using namespace std;
template <class T>
void checkMin(T& r, T v) {
  if (r > v) r = v;
}
const int N = 100010;
long long dp[N][110];
int n, m, p;
int d[N], h[N], t[N];
long long sum[N];
int Q[N];
int head, tail;
bool better(int p, int q, long long t, int j) {
  return dp[p][j] + sum[p] - dp[q][j] - sum[q] <= t * (p - q);
}
int main() {
  memset(dp, 0x3f, sizeof(dp));
  long long ans = 0;
  scanf("%d%d%d", &n, &m, &p);
  d[0] = 0;
  for (int i = 0; i < n - 1; ++i) {
    scanf("%d", d + (i + 1));
    d[i + 1] += d[i];
  }
  for (int i = 0; i < m; ++i) {
    scanf("%d%d", h + i, t + i);
    h[i]--;
    t[i] = t[i] - d[h[i]];
  }
  sort(t, t + m);
  for (int i = 0; i < m; ++i) sum[i] = t[i] + (i ? sum[i - 1] : 0);
  long long s = 0;
  for (int i = 0; i < m; ++i) {
    dp[i][0] = (t[i] * (long long)i - s);
    s += t[i];
  }
  for (int i = 0; i < p; ++i) dp[0][i] = dp[0][0];
  for (int j = 1; j < p; ++j) {
    head = tail = 0;
    Q[tail++] = 0;
    for (int i = 1; i < m; ++i) {
      while (head + 1 < tail) {
        if (better(Q[head + 1], Q[head], t[i], j - 1))
          head++;
        else
          break;
      }
      int ch = Q[head];
      checkMin(dp[i][j],
               dp[ch][j - 1] + (i - ch) * 1LL * t[i] - sum[i] + sum[ch]);
      while (head + 1 < tail) {
        int pre0 = Q[tail - 1], pre1 = Q[tail - 2];
        long long x1 = pre0 - pre1, y1 = (dp[pre0][j - 1] + sum[pre0] -
                                          dp[pre1][j - 1] - sum[pre1]);
        long long x2 = i - pre0,
                  y2 = (dp[i][j - 1] + sum[i] - dp[pre0][j - 1] - sum[pre0]);
        if (x1 * y2 - x2 * y1 < 0)
          tail--;
        else
          break;
      }
      Q[tail++] = i;
    }
  }
  ans += dp[m - 1][p - 1];
  cout << ans << endl;
  return 0;
}
