#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int n, m, p, cur, last, q[maxn];
long long ans = 1e18, d[maxn], a[maxn], s[maxn], dp[2][maxn];
double slope(int a, int b) {
  return 1.0 * (dp[last][a] + s[a] - dp[last][b] - s[b]) / (a - b);
}
int main() {
  scanf("%d %d %d", &n, &m, &p);
  for (int i = 2; i <= n; i++) {
    scanf("%lld", &d[i]);
    d[i] += d[i - 1];
  }
  for (int i = 1; i <= m; i++) {
    int x;
    scanf("%d %lld", &x, &a[i]);
    a[i] -= d[x];
  }
  sort(a + 1, a + m + 1);
  for (int i = 1; i <= m; i++) {
    s[i] = s[i - 1] + a[i];
  }
  cur = 1, last = 0;
  fill(dp[last] + 1, dp[last] + m + 1, 1e18);
  for (int i = 1; i <= p; i++) {
    int l = 0, r = -1;
    q[++r] = 0;
    for (int j = 1; j <= m; j++) {
      while (l < r && slope(q[l + 1], q[l]) < a[j]) {
        l++;
      }
      dp[cur][j] = dp[last][q[l]] + a[j] * (j - q[l]) - (s[j] - s[q[l]]);
      while (l < r && slope(q[r], q[r - 1]) > slope(j, q[r])) {
        r--;
      }
      q[++r] = j;
    }
    ans = min(ans, dp[cur][m]);
    swap(cur, last);
  }
  printf("%lld\n", ans);
  return 0;
}
