#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T &a, const T &b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T &a, const T &b) {
  if (b > a) a = b;
}
const long long inf = 1e18 + 10;
const int maxn = 1e5 + 10;
const int maxp = 110;
long long dp[maxp][maxn], g[maxn], s[maxn], a[maxn], d[maxn], que[maxn];
int n, m, p, head, tail;
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 2; i <= n; i++) {
    int x;
    scanf("%d", &x);
    d[i] = d[i - 1] + x;
  }
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    a[i] = y - d[x];
  }
  sort(a + 1, a + m + 1);
  for (int i = 1; i <= m; i++) s[i] = s[i - 1] + a[i];
  for (int i = 0; i < maxp; i++)
    for (int j = 0; j < maxn; j++) dp[i][j] = inf;
  dp[0][0] = 0ll;
  for (int i = 1; i <= p; i++) {
    for (int j = 1; j <= m; j++) g[j] = dp[i - 1][j] + s[j];
    int h = 1, t = 1;
    que[1] = 0;
    for (int j = 1; j <= m; j++) {
      while (h < t && g[que[h + 1]] - g[que[h]] <= a[j] * (que[h + 1] - que[h]))
        h++;
      dp[i][j] = min(dp[i - 1][j], g[que[h]] - s[j] + a[j] * (j - que[h]));
      while (h < t && (g[j] - g[que[t]]) * (que[t] - que[t - 1]) <=
                          (g[que[t]] - g[que[t - 1]]) * (j - que[t]))
        t--;
      t++;
      que[t] = j;
    }
  }
  printf("%lld\n", dp[p][m]);
  return 0;
}
