#include <bits/stdc++.h>
using namespace std;
template <class T>
void debug(T a, T b) {
  for (; a != b; ++a) cerr << *a << ' ';
  cerr << endl;
}
typedef pair<int, long long int> pi;
int n, m, p;
int d[100005];
long long int tim[100005];
long long int dp[105][100005];
static const long long int INF = 1e18;
long long int sum[100005];
pi stk[100005];
int n2;
inline long long int getsum(int l, int r) {
  if (l >= r) return 0;
  return (tim[r - 1] - tim[l]) * (r - l) - (sum[r] - sum[l] - tim[l] * (r - l));
}
inline double getdiv(pi a, pi b) {
  long long int dif = b.second - a.second - getsum(a.first, b.first + 1);
  return dif / (double)(b.first - a.first);
}
int main() {
  cin >> n >> m >> p;
  for (int i = 0; i < n - 1; ++i) scanf("%d", &d[i + 1]);
  for (int i = 0; i < n - 1; ++i) d[i + 1] += d[i];
  for (int i = 0; i < m; ++i) {
    int h, t;
    scanf("%d%d", &h, &t);
    --h;
    t -= d[h];
    tim[i] = t;
  }
  sort(tim, tim + m);
  for (int i = 0; i < m; ++i) sum[i + 1] = sum[i] + tim[i];
  for (int i = 0; i < 105; ++i)
    for (int j = 0; j < 100005; ++j) dp[i][j] = INF;
  dp[0][0] = 0;
  cerr << "called:" << 50 << endl;
  for (int i = 0; i < p; ++i) {
    n2 = 0;
    int st = 0, en = 0;
    for (int j = 0; j < m + 1; ++j) {
      while (st + 1 < en && getsum(stk[st + 1].first, j) + stk[st + 1].second <=
                                stk[st].second + getsum(stk[st].first, j))
        ++st;
      dp[i + 1][j] = min(dp[i][j], stk[st].second + getsum(stk[st].first, j));
      pi ins = make_pair(j, dp[i][j]);
      while (st + 1 < en) {
        double bord = getdiv(stk[en - 2], stk[en - 1]) + tim[stk[en - 1].first];
        double bord3 = getdiv(stk[en - 1], ins) + tim[j];
        if (bord3 <= bord)
          --en;
        else
          break;
      }
      stk[en++] = ins;
    }
  }
  long long int res = dp[p][m];
  cout << res << endl;
  return 0;
}
