#include <bits/stdc++.h>
using namespace std;
long long dp[100005][105];
long long n;
long long m;
long long p;
long long x[100005];
long long a[100005];
long long b[100005];
long long s[100005];
long long q[100005];
long long tail;
long long head;
double slope(int j1, int j2, int k) {
  return 1.0 * ((dp[j2][k] + s[j2]) - (dp[j1][k] + s[j1])) /
         (j2 - j1 == 0 ? 1e-9 : j2 - j1);
}
int main() {
  scanf("%lld %lld %lld", &n, &m, &p);
  for (int i = 2; i <= n; ++i) {
    long long tmp;
    scanf("%lld", &tmp);
    x[i] = x[i - 1] + tmp;
  }
  for (int i = 1; i <= m; ++i) {
    long long tmp;
    scanf("%lld", &tmp);
    a[i] = x[tmp];
    scanf("%lld", b + i);
    a[i] = b[i] - a[i];
  }
  sort(a + 1, a + 1 + m);
  if (a[1] < 0) {
    long long tmp = abs(a[1]);
    for (int i = 1; i <= m; ++i) a[i] += tmp;
  }
  for (int i = 1; i <= m; ++i) s[i] = s[i - 1] + a[i];
  for (int i = 1; i <= m; ++i) dp[i][1] = a[i] * i - s[i];
  p = min(p, m);
  for (int k = 1; k < p; ++k) {
    head = tail = 0;
    for (int i = k; i < m; ++i) {
      while (tail - head >= 2 &&
             slope(q[tail - 1], i, k) <= slope(q[tail - 2], q[tail - 1], k))
        --tail;
      q[tail++] = i;
      while (tail - head >= 2 && slope(q[head], q[head + 1], k) <= a[i + 1])
        ++head;
      dp[i + 1][k + 1] = (dp[q[head]][k] + s[q[head]]) +
                         (-s[(i + 1)] + (i + 1) * a[(i + 1)]) -
                         a[i + 1] * q[head];
    }
  }
  printf("%lld\n", dp[m][p]);
  return 0;
}
