#include <bits/stdc++.h>
using namespace std;
struct line {
  long long k, b;
  double x;
  line(long long k = 0, long long b = 0, long long x = 0) : k(k), b(b), x(x) {}
  double intersect(line o) { return (b - o.b) / (o.k - k); }
  long long calc(long long x) { return k * x + b; }
  bool operator<(const line &rhs) const { return x < rhs.x; }
  bool operator>(const line &rhs) const { return rhs < *this; }
  bool operator<=(const line &rhs) const { return !(rhs < *this); }
  bool operator>=(const line &rhs) const { return !(*this < rhs); }
};
struct CHT {
  vector<line> st;
  void add(line l) {
    if (st.size() == 0) {
      st.push_back(l);
      st.back().x = -1000000000000000000LL;
    } else {
      while (st.size() > 0) {
        double x = l.intersect(st.back());
        l.x = x;
        if (x > st.back().x) {
          break;
        }
        st.pop_back();
      }
      st.push_back(l);
    }
  }
  long long calc(long long x) {
    auto it = upper_bound(st.begin(), st.end(), line(0, 0, x)) - 1;
    return (*it).calc(x);
  }
};
CHT chts[101];
long long dst[100005];
long long cats[100005];
long long pref[100005];
signed main() {
  ios_base::sync_with_stdio(false);
  long long n, m, p;
  cin >> m >> n >> p;
  dst[1] = 0;
  for (long long i = 2; i <= m; i++) {
    long long d;
    cin >> d;
    dst[i] = dst[i - 1] + d;
  }
  pref[0] = 0;
  for (long long i = 1; i <= n; i++) {
    long long h, t;
    cin >> h >> t;
    cats[i] = t - dst[h];
  }
  sort(cats + 1, cats + 1 + n);
  for (long long i = 1; i <= n; i++) {
    pref[i] = pref[i - 1] + cats[i];
  }
  long long ans;
  line tmp;
  tmp.k = 0;
  tmp.b = 0;
  chts[0].add(tmp);
  for (long long i = 1; i <= p; i++) {
    tmp.k = 0;
    tmp.b = 0;
    chts[i].add(tmp);
    for (long long j = 1; j <= n; j++) {
      ans = cats[j] * j - pref[j] + chts[i - 1].calc(cats[j]);
      tmp.k = -j;
      tmp.b = pref[j] + ans;
      chts[i].add(tmp);
    }
  }
  cout << ans;
  return 0;
}
