#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const long long G = 1e5 + 5;
long long a, k, p;
long long d[G], m[G], e[G];
long long dp[100][G];
long long func(long long l, long long r) {
  long long d = r - l + 1;
  return d * m[r] - (e[r] - (l ? e[l - 1] : 0));
}
long long calc(long long la, long long i, long long lf, long long rg) {
  long long mn = 1e18, u = -1;
  rg = min(rg, i);
  for (; lf <= rg; lf++) {
    long long tyt = dp[la - 1][lf - 1] + func(lf, i);
    if (tyt < mn) {
      mn = tyt;
      u = lf;
    }
  }
  dp[la][i] = mn;
  return u;
}
void rec(long long la, long long l, long long r, long long lf, long long rg) {
  if (l > r) return;
  long long md = (l + r) >> 1;
  long long u = calc(la, md, lf, rg);
  rec(la, l, md - 1, lf, u);
  rec(la, md + 1, r, u, rg);
}
int main() {
  cin.tie(0);
  cout.tie(0);
  cin.sync_with_stdio(0);
  cout.sync_with_stdio(0);
  ;
  cin >> a >> k >> p;
  p = min(p, k);
  d[0] = 0;
  for (int q = 1; q < a; q++) {
    cin >> d[q];
    d[q] += d[q - 1];
  }
  long long o = 0;
  for (int q = 0; q < k; q++) {
    long long nh, t;
    cin >> nh >> t;
    nh--;
    long long u = t - d[nh];
    m[q] = u;
  }
  sort(m, m + k);
  for (int q = 0; q < k; q++) e[q] = m[q] + (q ? e[q - 1] : 0);
  for (int q = 0; q < k; q++) {
    dp[0][q] = func(0, q);
  }
  for (int q = 1; q < p; q++) {
    rec(q, 0, k - 1, 0, k - 1);
  }
  cout << o + dp[p - 1][k - 1];
}
