#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const int INF2 = 0x3f3f3f3f;
const long long INF64 = 1e18;
const double INFD = 1e30;
const double EPS = 1e-6;
const double PI = acos(-1);
const int MOD = 998244353;
template <typename T>
inline T read() {
  T X = 0, w = 0;
  char ch = 0;
  while (!isdigit(ch)) {
    w |= ch == '-';
    ch = getchar();
  }
  while (isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();
  return w ? -X : X;
}
const int MAXN = 100005;
int n, m, k;
int dr[4] = {1, 0, -1, 0};
int dc[4] = {0, 1, 0, -1};
int dr2[8] = {1, 1, 1, -1, -1, -1, 0, 0};
int dc2[8] = {1, 0, -1, 1, 0, -1, 1, -1};
int CASE = 1;
int pref[MAXN];
int cats[MAXN];
long long S[MAXN];
long long dp[105][MAXN];
int QQ[MAXN];
double slope(int i, int j, int k) {
  return (dp[i - 1][k] - dp[i - 1][j] + S[k] - S[j]) / (k - j);
}
int main() {
  n = read<int>(), m = read<int>(), k = read<int>();
  for (int i = 2; i <= n; i++) {
    int x = read<int>();
    pref[i] = pref[i - 1] + x;
  }
  for (int i = 1; i <= m; i++) {
    int h = read<int>(), t = read<int>();
    cats[i] = t - pref[h];
  }
  sort(cats + 1, cats + m + 1);
  for (int j = 1; j <= m; j++) S[j] = S[j - 1] + cats[j];
  for (int i = 0; i <= k; i++)
    for (int j = 1; j <= m; j++) dp[i][j] = INF64;
  dp[0][0] = 0;
  for (int i = 1; i <= k; i++) {
    QQ[0] = 0;
    int l = 0, r = 0;
    for (int j = 1; j <= m; j++) {
      while (l < r && slope(i, QQ[l + 1], QQ[l]) <= cats[j]) ++l;
      int opt = QQ[l];
      dp[i][j] =
          dp[i - 1][opt] + (j - opt) * (long long)cats[j] - S[j] + S[opt];
      while (l < r && slope(i, QQ[r], QQ[r - 1]) >= slope(i, j, QQ[r])) --r;
      QQ[++r] = j;
    }
  }
  printf("%lld\n", dp[k][m]);
  return 0;
}
