#include <bits/stdc++.h>
using namespace std;
struct LinearCHT {
  long long f(pair<long long, long long> l, long long x) {
    return l.first * x + l.second;
  }
  bool bad(pair<long long, long long> l1, pair<long long, long long> l2,
           pair<long long, long long> l3) {
    return (l3.second - l1.second) * (l1.first - l2.first) <=
           (l2.second - l1.second) * (l1.first - l3.first);
  }
  deque<pair<long long, long long> > q;
  int curQ;
  void init() {
    q.clear();
    curQ = 0;
  }
  void add_line(long long a, long long b) {
    pair<long long, long long> l = pair<long long, long long>(a, b);
    if (q.size() == 0) {
      q.push_back(l);
      return;
    }
    bool left = (l.first >= q.at(0).first);
    while (q.size() >= 2) {
      if (left) {
        pair<long long, long long> l1 = q.at(0), l2 = q.at(1);
        if (!bad(l, l1, l2)) break;
        q.pop_front();
        curQ -= 1;
      } else {
        pair<long long, long long> l1 = q.at(q.size() - 2),
                                   l2 = q.at(q.size() - 1);
        if (!bad(l1, l2, l)) break;
        q.pop_back();
        curQ -= 1;
      }
    }
    if (left)
      q.push_front(l);
    else
      q.push_back(l);
  }
  long long query(long long x) {
    if (curQ < 0) curQ = 0;
    if (curQ >= q.size()) curQ = (int)q.size() - 1;
    while (curQ + 1 < q.size() && curQ + 1 >= 0 &&
           f(q.at(curQ + 1), x) < f(q.at(curQ), x))
      curQ += 1;
    return f(q.at(curQ), x);
  }
};
const long long N = 100100;
const long long K = 110;
const long long Inf = 1e18;
long long d[N];
long long p[N];
long long h[N];
long long t[N];
long long a[N];
long long w[N];
long long s[N];
long long Dp[N][K];
void min_self(long long& x, long long y) { x = min(x, y); }
long long Line(long long A, long long B, long long x) { return A * x + B; }
int main() {
  long long n, first, k;
  cin >> n >> first >> k;
  for (long long i = 2; i <= n; i++)
    scanf("%I64d", d + i), p[i] = d[i] + p[i - 1];
  for (long long i = 1; i <= first; i++)
    scanf("%I64d%I64d", h + i, t + i), a[i] = t[i] - p[h[i]];
  sort(a + 1, a + 1 + first);
  for (long long i = 1; i <= first; i++) w[i] = a[i], s[i] = a[i] + s[i - 1];
  for (long long p = 0; p < K; p++)
    for (long long i = 0; i < N; i++) Dp[i][p] = Inf;
  for (long long p = 0; p <= k; p++) Dp[0][p] = 0;
  for (long long p = 1; p <= k; p++) {
    LinearCHT ConvexHull;
    ConvexHull.init();
    ConvexHull.add_line(0, 0);
    for (long long i = 1; i <= first; i++) {
      ConvexHull.add_line(-i, s[i] + Dp[i][p - 1]);
      Dp[i][p] = i * w[i] - s[i] + ConvexHull.query(+w[i]);
    }
  }
  cout << Dp[first][k];
}
