#include <bits/stdc++.h>
using namespace std;
struct Convex {
  pair<long long, long long> mas[100005];
  int tail = 0, last = 0;
  void upd(pair<long long, long long> L) {
    while (tail > 1) {
      pair<long long, long long> L1 = mas[tail];
      tail--;
      pair<long long, long long> L2 = mas[tail];
      long double k1 = 1.0 * (L2.second - L1.second) / (L1.first - L2.first),
                  k2 = 1.0 * (L.second - L1.second) / (L1.first - L.first);
      if (k1 < k2) {
        tail++;
        break;
      }
    }
    if (last > tail) last = tail;
    tail++;
    mas[tail] = L;
    if (last == 0) last = 1;
    return;
  }
  long long get(long long first) {
    int uk = last;
    while (uk < tail) {
      long double k = 1.0 * (mas[uk + 1].second - mas[uk].second) /
                      (mas[uk].first - mas[uk + 1].first);
      if (k > first) break;
      uk++;
    }
    last = uk;
    return mas[uk].first * first + mas[uk].second;
  }
  void clear() {
    tail = 0, last = 0;
    return;
  }
};
long long d[100005], rasst[100005], pref[100005];
pair<long long, int> del[100005];
pair<int, long long> a[100005];
long long dp[3][100005];
Convex S;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, m, p;
  cin >> n >> m >> p;
  for (int i = 2; i <= n; i++) cin >> d[i];
  rasst[1] = 0;
  for (int i = 2; i <= n; i++) rasst[i] = rasst[i - 1] + d[i];
  for (int i = 1; i <= m; i++) {
    cin >> a[i].first >> a[i].second;
    del[i] = make_pair(a[i].second - rasst[a[i].first], i);
  }
  sort(del + 1, del + m + 1);
  pref[0] = 0ll;
  for (int i = 1; i <= m; i++) pref[i] = pref[i - 1] + del[i].first;
  for (int i = 1; i <= m; i++) {
    long long k = del[i].first;
    dp[0][i] = (long long)(i)*k - pref[i];
  }
  for (int i = 2; i <= p; i++) {
    S.clear();
    for (int j = 1; j <= m; j++) {
      long long k = del[j].first;
      S.upd(make_pair((long long)(-j), pref[j - 1] + dp[0][j - 1]));
      long long t = S.get(k);
      dp[1][j] = t + (long long)(j + 1) * k - pref[j];
    }
    for (int j = 1; j <= m; j++) dp[0][j] = dp[1][j];
  }
  cout << dp[0][m];
  return 0;
}
