#include <bits/stdc++.h>
#pragma GCC optimize("O2")
#pragma GCC optimize("unroll-loops")
using namespace std;
const long double eps = 1e-7;
const int inf = 1000000010;
const long long INF = 10000000000000010LL;
const int mod = 1000000007;
const int MAXN = 100010, LOG = 20;
long long n, m, k, u, v, x, y, t, a, b, ans;
long long A[MAXN], B[MAXN];
long long dp[101][MAXN];
long long cost(int l, int r) { return B[r] * (r - l); }
void divide(int k, int l, int r, int optl, int optr) {
  if (r < l) return;
  int mid = (l + r) >> 1, opt;
  for (int j = optl; j <= min(optr, mid); j++)
    if (dp[k - 1][j] + cost(j, mid) < dp[k][mid]) {
      dp[k][mid] = dp[k - 1][j] + cost(j, mid);
      opt = j;
    }
  divide(k, l, mid - 1, optl, opt);
  divide(k, mid + 1, r, opt, optr);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> k;
  k = min(k, m);
  for (int i = 2; i <= n; i++) cin >> A[i], A[i] += A[i - 1];
  for (int i = 1; i <= m; i++) {
    cin >> x >> t;
    x = A[x];
    B[i] = t - x;
    ans -= B[i];
  }
  sort(B + 1, B + m + 1);
  memset(dp, 31, sizeof(dp));
  dp[0][0] = 0;
  for (int i = 1; i <= k; i++) divide(i, 1, m, 0, m);
  cout << dp[k][m] + ans << '\n';
  return 0;
}
