#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 100;
long long inf = 1e18 + 7;
int n, m, p, i;
long long d[maxn], s[maxn], t[maxn];
long long dp[110][maxn];
int q[maxn];
long long getup(int k2, int k1) {
  long long g1 = dp[i - 1][k1] + s[k1];
  long long g2 = dp[i - 1][k2] + s[k2];
  return g2 - g1;
}
long long getdown(int k2, int k1) { return k2 - k1; }
int main() {
  while (scanf("%d%d%d", &n, &m, &p) != EOF) {
    for (i = 2; i <= n; i++) {
      cin >> d[i];
      d[i] += d[i - 1];
    }
    int qt;
    for (i = 1; i <= m; i++) {
      cin >> qt >> t[i];
      t[i] = t[i] - d[qt];
    }
    sort(t + 1, t + 1 + m);
    for (i = 1; i <= m; i++) s[i] = t[i] + s[i - 1];
    for (i = 1; i <= m; i++) dp[0][i] = inf;
    int head = 0, tail = 0;
    for (i = 1; i <= p; i++) {
      head = 1;
      tail = 0;
      for (int j = 0; j <= m; j++) {
        while (head < tail && getup(q[head + 1], q[head]) <=
                                  t[j] * getdown(q[head + 1], q[head]))
          head++;
        dp[i][j] =
            dp[i - 1][q[head]] + (j - q[head]) * t[j] - (s[j] - s[q[head]]);
        while (head < tail &&
               getup(j, q[tail]) * getdown(q[tail], q[tail - 1]) <=
                   getup(q[tail], q[tail - 1]) * getdown(j, q[tail]))
          tail--;
        q[++tail] = j;
      }
    }
    cout << dp[p][m] << endl;
  }
}
