#include <bits/stdc++.h>
using namespace std;
void stop() {
  printf("press any key to continue...\n");
  while (getchar() != '\n') {
  }
}
const long long INF = (long long)(1e9 * 1e5 * 10);
int n, m, p;
long long d[100050];
long long h[100050];
long long t[100050];
long long a[100050];
long long s[100050];
long long dp[110][100050];
int que[100050];
int test_num;
long long solve_pm2() {
  for (int i = 1; i <= p; i++) {
    for (int j = 0; j < m; j++) {
      if (i == 1) {
        dp[i][j] = a[j] * (j + 1) - s[j];
      } else {
        dp[i][j] = INF;
      }
    }
  }
  for (int i = 2; i <= p; i++) {
    for (int j = i - 1; j < m; j++) {
      for (int k = 0; k < j; k++) {
        dp[i][j] = min(dp[i][j], dp[i - 1][k] + a[j] * (j - k) - s[j] + s[k]);
      }
    }
  }
  return dp[p][m - 1];
}
double f(int i, int p, int q) {
  double res = (double)((dp[i][q] + s[q]) - (dp[i][p] + s[p])) / (q - p);
  return res;
}
long long solve_pm() {
  for (int i = 1; i <= p; i++) {
    for (int j = 0; j < m; j++) {
      if (i == 1) {
        dp[i][j] = a[j] * (j + 1) - s[j];
      } else {
        dp[i][j] = INF;
      }
    }
  }
  if (test_num == 4) {
    cout << endl;
  }
  for (int i = 1; i < p; i++) {
    int l = 0, r = 0;
    que[r++] = 0;
    for (int j = 1; j < m; j++) {
      while (l + 1 < r && f(i, que[l], que[l + 1]) <= a[j]) l++;
      int k = que[l];
      dp[i + 1][j] = dp[i][k] + a[j] * (j - k) - s[j] + s[k];
      while (l + 1 < r && f(i, que[r - 1], j) <= f(i, que[r - 2], que[r - 1]))
        r--;
      que[r++] = j;
    }
  }
  return dp[p][m - 1];
}
int myrand(int min_i, int max_i) {
  int div = max_i - min_i;
  return rand() % div + min_i;
}
void test(int count, int _m, int min_t, int max_t, int _p) {
  for (int c = 0; c < count; c++) {
    test_num = c;
    m = _m;
    p = _p;
    for (int i = 0; i < m; i++) {
      a[i] = myrand(min_t, max_t);
    }
    sort(a, a + m);
    s[0] = a[0];
    for (int i = 1; i < m; i++) {
      s[i] = s[i - 1] + a[i];
    }
    long long except = solve_pm2();
    long long receive = solve_pm();
    if (except == receive) {
      printf("\rCASE#%d:PASSED", c);
    } else {
      printf("\rCASE#%d:FAILED\n", c);
      printf("EXCEPT :%I64d\n", except);
      printf("RECEIVE:%I64d\n", receive);
      printf("\n");
      for (int i = 0; i < m; i++) {
        printf("%I64d, ", a[i]);
      }
      printf("\n");
      printf("p=%d\n", p);
      printf("\n\n");
      stop();
    }
  }
  printf("\n\n");
}
void input() {
  istream& in = cin;
  in >> n >> m >> p;
  d[0] = 0;
  for (int i = 2; i <= n; i++) {
    in >> d[i];
  }
  for (int i = 1; i <= m; i++) {
    in >> h[i] >> t[i];
  }
  for (int i = 2; i <= n; i++) {
    d[i] = d[i - 1] + d[i];
  }
  for (int i = 1; i <= m; i++) {
    a[i - 1] = t[i] - d[h[i]];
  }
  sort(a, a + m);
  s[0] = a[0];
  for (int i = 1; i < m; i++) {
    s[i] = a[i] + s[i - 1];
  }
}
int main() {
  bool isTest = false;
  if (isTest) {
    test(100, 100, 0, 10000, 100);
  } else {
    input();
    cout << solve_pm() << endl;
  }
}
