#include <bits/stdc++.h>
using namespace std;
inline int min(int a, int b) { return (a > b) ? b : a; }
inline int max(int a, int b) { return (a > b) ? a : b; }
const int N = 2e5 + 10;
const int inf = 1e9 + 7;
const long long linf = 1e18 + 7;
int n, m, K2;
long long d[N], dp[N][105], p[N], b[N], a[N];
vector<int> q;
long long f(int i, long long x) { return x * i + b[i]; }
bool nona(int i, int j, int k) {
  return (b[k] - b[i]) * (i - j) >= (b[j] - b[i]) * (i - k);
}
int main() {
  scanf("%d%d%d", &m, &n, &K2);
  for (int i = 2, x; i <= m; i++) scanf("%d", &x), d[i] = d[i - 1] + x;
  for (int i = 1, x, y; i <= n; i++) scanf("%d%d", &x, &y), a[i] = y - d[x];
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++)
    p[i] = p[i - 1] + a[i], dp[i][1] = a[i] * i - p[i];
  for (int k = 2; k <= K2; k++) {
    for (int i = 1; i <= n; i++) {
      b[i] = p[i - 1] + dp[i - 1][k - 1];
      int l = -1, r = (int)q.size() - 1;
      while (r - l > 1) {
        m = (l + r) / 2;
        if (f(q[m], -a[i]) >= f(q[m + 1], -a[i]))
          l = m;
        else
          r = m;
      }
      if (!q.empty())
        dp[i][k] =
            min(dp[i - 1][k - 1], f(q[r], -a[i]) + (i + 1) * a[i] - p[i]);
      else
        dp[i][k] = dp[i - 1][k - 1];
      while ((int)q.size() > 1 && nona(q[(int)q.size() - 2], q.back(), i))
        q.pop_back();
      q.push_back(i);
    }
    q.clear();
  }
  cout << dp[n][K2] << endl;
}
