#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 123;
const int inf = 1e9;
const long double Pi = acos(-1);
const int mod = 95542721;
const long long Inf = 1e18;
int n, m, p, a[N], d[N], ptr;
long long dp[N], second[N], ans, buf[N];
struct line {
  long long k, b;
};
vector<line> st;
long long first(line now, int x) { return 1ll * now.k * x + now.b; }
long long get(int x) {
  if (ptr >= st.size()) ptr = st.size() - 1;
  while (ptr + 1 < st.size() && first(st[ptr + 1], x) <= first(st[ptr], x))
    ptr++;
  return first(st[ptr], x);
}
long double intersection(line a, line b) {
  return 1.0 * (b.b - a.b) / (a.k - b.k);
}
bool bad(line a, line b, line c) {
  return intersection(a, c) <= intersection(a, b);
}
void add(line now) {
  while (st.size() > 1 && bad(st[st.size() - 2], st.back(), now)) st.pop_back();
  st.push_back(now);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m >> p;
  for (int i = 2; i <= n; i++) {
    cin >> d[i];
    d[i] += d[i - 1];
  }
  for (int i = 1; i <= m; i++) {
    int x, y;
    cin >> x >> y;
    a[i] = y - d[x];
  }
  sort(a + 1, a + m + 1);
  for (int i = 1; i <= m; i++) {
    dp[i] = Inf;
    second[i] = a[i] + second[i - 1];
  }
  ans = Inf;
  for (int i = 1; i <= p; i++) {
    for (int j = 0; j <= m; j++) {
      buf[j] = dp[j];
      dp[j] = Inf;
    }
    st.clear();
    for (int j = 1; j <= m; j++) {
      add({-(j - 1), second[j - 1] + buf[j - 1]});
      dp[j] = get(a[j]) + 1ll * a[j] * j - second[j];
    }
    ans = min(ans, dp[m]);
  }
  cout << ans << endl;
  return 0;
}
