#include <bits/stdc++.h>
using namespace std;
long long dp[110][101000];
long long d[100010];
long long sumd[100010];
int n, m, p;
int dis[100010];
int tot = 1;
struct STA {
  struct Sta {
    long long x, y;
    Sta(long long a, long long b) : x(a), y(b) {}
    Sta() {}
  } s[100010];
  int top, now;
  void init() {
    top = -1;
    now = 0;
  }
  void P(long long a, long long b) {
    if (top < 1)
      s[++top] = Sta(a, b);
    else {
      while (1) {
        if (top == 0) {
          s[++top] = Sta(a, b);
          break;
        }
        long long y1 = b - s[top].y;
        long long x1 = a - s[top].x;
        long long y2 = s[top].y - s[top - 1].y;
        long long x2 = s[top].x - s[top - 1].x;
        if (y1 * x2 > y2 * x1) {
          s[++top] = Sta(a, b);
          break;
        } else {
          top--;
        }
      }
    }
  }
} S;
double cal(int x) {
  return double(S.s[x + 1].y - S.s[x].y) / double(S.s[x + 1].x - S.s[x].x);
}
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 2; i < n + 1; ++i) {
    scanf("%d", &dis[i]);
    dis[i] = dis[i - 1] + dis[i];
  }
  int h, t;
  for (int i = 0; i < m; ++i) {
    scanf("%d%d", &h, &t);
    d[tot++] = t - dis[h];
  }
  sort(d + 1, d + tot);
  S.init();
  for (int i = 1; i < tot; ++i) sumd[i] = sumd[i - 1] + d[i];
  for (int i = 1; i < tot; ++i) dp[1][i] = d[i] * i - sumd[i];
  for (int k = 2; k < p + 1; ++k) {
    for (int i = k; i < tot; ++i) {
      S.P(i - 1, dp[k - 1][i - 1] + sumd[i - 1]);
      while (S.now < S.top && cal(S.now) < double(d[i])) {
        S.now++;
      }
      dp[k][i] = S.s[S.now].y - S.s[S.now].x * d[i] + i * d[i] - sumd[i];
    }
    S.init();
  }
  if (p >= tot) {
    puts("0");
    return 0;
  }
  printf("%lld\n", dp[p][tot - 1]);
  return 0;
}
