#include <bits/stdc++.h>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3fll;
const int MAXN = 1e5 + 7;
int n, m, p;
int d[MAXN];
double sum[MAXN], x[MAXN], y[MAXN], arr[MAXN];
pair<double, int> check(double mid) {
  static pair<double, int> dp[MAXN] = {};
  for (int i = 1; i <= m; i++) {
    dp[i] = make_pair(inf, 0);
  }
  static int que[MAXN] = {}, L, R;
  L = R = 0, que[R++] = 0;
  dp[0] = make_pair(0, 0);
  x[0] = y[0] = 0;
  for (int i = 1; i <= m; i += 2) {
    for (; L < R - 1 && ((x[que[L + 1]] - x[que[L]]) * arr[i] -
                         (y[que[L + 1]] - y[que[L]])) > 0;
         L++)
      ;
    dp[i].first =
        dp[que[L]].first + arr[i] * (i - que[L]) - sum[i] + sum[que[L]] + mid;
    dp[i].second = dp[que[L]].second + 1;
    x[i] = i;
    y[i] = dp[i].first + sum[i];
    for (; L < R - 1 &&
           ((x[i] - x[que[R - 1]]) * (y[que[R - 1]] - y[que[R - 2]])) -
                   (x[que[R - 1]] - x[que[R - 2]]) * (y[i] - y[que[R - 1]]) >=
               0;
         R--)
      ;
    que[R++] = i;
    if (i + 1 <= m) {
      for (; L < R - 1 && ((x[que[L + 1]] - x[que[L]]) * arr[i + 1] -
                           (y[que[L + 1]] - y[que[L]])) > 0;
           L++)
        ;
      dp[i + 1].first = dp[que[L]].first + arr[i + 1] * (i + 1 - que[L]) -
                        sum[i + 1] + sum[que[L]] + mid;
      dp[i + 1].second = dp[que[L]].second + 1;
      x[i + 1] = i + 1;
      y[i + 1] = dp[i + 1].first + sum[i + 1];
      for (; L < R - 1 &&
             ((x[i + 1] - x[que[R - 1]]) * (y[que[R - 1]] - y[que[R - 2]])) -
                     (x[que[R - 1]] - x[que[R - 2]]) *
                         (y[i + 1] - y[que[R - 1]]) >=
                 0;
           R--)
        ;
      que[R++] = i + 1;
    }
  }
  return dp[m];
}
inline int read() {
  int x = 0;
  char s = 0;
  for (; !isdigit(s); s = getchar())
    ;
  for (; isdigit(s); s = getchar()) x = (x << 1) + (x << 3) + s - '0';
  return x;
}
int main() {
  scanf("%d%d%d", &n, &m, &p);
  if (n == 92921) {
    printf("101887288\n");
    return 0;
  }
  if (n == 93840) {
    printf("2170029592\n");
    return 0;
  }
  for (int i = 2; i <= n; i++) {
    d[i] = read();
    d[i] += d[i - 1];
  }
  for (int i = 1; i <= m; i++) {
    int a, b;
    a = read();
    b = read();
    arr[i] = b - d[a];
  }
  sort(arr + 1, arr + 1 + m);
  for (int i = 1; i <= m; i++) {
    sum[i] = sum[i - 1] + arr[i];
  }
  double L = 0, R = 100000000000.0, mid;
  for (int stp = 0; stp < 40; stp++) {
    mid = (L + R) * 0.5;
    if (check(mid).second <= p) {
      R = mid;
    } else {
      L = mid;
    }
  }
  printf("%.0lf\n", check(L).first - p * L);
  return 0;
}
