#include <bits/stdc++.h>
using namespace std;
int n, m, p;
long long t[100005], sum[100005];
int d[100005];
long long dp[105][100005];
int dq[100005], s, e;
int main() {
  memset(dp, 63, sizeof(dp));
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 1; i < n; ++i) {
    int x;
    scanf("%d", &x);
    d[i] = d[i - 1] + x;
  }
  for (int i = 1; i <= m; ++i) {
    int a, b;
    scanf("%d%d", &a, &b), a--;
    t[i] = b - d[a] + 1000000000;
  }
  sort(t + 1, t + 1 + m);
  for (int i = 1; i <= m; ++i) sum[i] = sum[i - 1] + t[i];
  for (int i = 0; i <= p; ++i) dp[i][0] = 0;
  for (int pp = 1; pp <= p; ++pp) {
    dq[0] = 0, s = 0, e = 1;
    for (int i = 1; i <= m; ++i) {
      long long c1 = t[i], c2 = i * t[i] - sum[i];
      while (s + 1 < e) {
        long long x1 = i, y1 = dp[pp - 1][i] + sum[i];
        long long x2 = dq[e - 1], y2 = dp[pp - 1][dq[e - 1]] + sum[dq[e - 1]];
        long long x3 = dq[e - 2], y3 = dp[pp - 1][dq[e - 2]] + sum[dq[e - 2]];
        if ((y1 - y2) * (x2 - x3) <= (y2 - y3) * (x1 - x2))
          e--;
        else
          break;
      }
      dq[e++] = i;
      while (s + 1 < e) {
        long long x1 = dq[s], y1 = dp[pp - 1][dq[s]] + sum[dq[s]];
        long long x2 = dq[s + 1], y2 = dp[pp - 1][dq[s + 1]] + sum[dq[s + 1]];
        if ((y2 - y1) <= c1 * (x2 - x1))
          s++;
        else
          break;
      }
      long long x = dq[s], y = dp[pp - 1][dq[s]] + sum[dq[s]];
      dp[pp][i] = y - x * c1 + c2;
    }
  }
  printf("%I64d", dp[p][m]);
}
