#include <bits/stdc++.h>
using namespace std;
const long long INF = 1LL << 60;
int x, k, n, q, m;
int c[10];
vector<int> status;
int rs[256];
vector<vector<long long> > F[32];
map<int, int> W;
int jump_to(int s, int t, vector<long long> &cur) {
  if (s >= t) return s;
  int d = t - s;
  for (int h = 0; h < (int)(31); h++) {
    if (d & 1 << h) {
      vector<long long> nxt(m, INF);
      for (int i = 0; i < (int)(m); i++)
        for (int j = 0; j < (int)(m); j++)
          nxt[i] = min(nxt[i], cur[j] + F[h][j][i]);
      for (int i = 0; i < (int)(m); i++) cur[i] = nxt[i];
    }
  }
  return t;
}
int walk_to(int s, int t, int wp, vector<long long> &cur) {
  if (s >= t) return s;
  while (s < t) {
    vector<long long> nxt(m, INF);
    for (int i = 0; i < (int)(m); i++) {
      int mask = status[i];
      if (!(mask & 1)) {
        nxt[rs[mask >> 1]] = min(nxt[rs[mask >> 1]], cur[i]);
      } else {
        for (int j = (int)(1); j < (int)(k + 1); j++) {
          if (!(mask & 1 << j)) {
            int nask = mask | 1 << j;
            nxt[rs[nask >> 1]] =
                min(nxt[rs[nask >> 1]], cur[i] + c[j] + W[s + j]);
          }
        }
      }
    }
    for (int i = 0; i < (int)(m); i++) cur[i] = nxt[i];
    ++s;
  }
  return t;
}
void disp(int p, const vector<long long> &v) {}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> x >> k >> n >> q;
  for (int i = 0; i < (int)(k); i++) cin >> c[i + 1];
  for (int mask = 0; mask < (int)(1 << k); mask++) {
    if (__builtin_popcountll(mask) == x) status.push_back(mask);
  }
  m = status.size();
  for (int i = 0; i < (int)(m); i++) rs[status[i]] = i;
  F[0] = vector<vector<long long> >(m, vector<long long>(m, INF));
  for (int i = 0; i < (int)(m); i++) {
    int mask = status[i];
    if (!(mask & 1)) {
      F[0][i][rs[mask >> 1]] = 0;
    } else {
      for (int j = (int)(1); j < (int)(k + 1); j++) {
        if (!(mask & 1 << j)) {
          int nask = mask | 1 << j;
          F[0][i][rs[nask >> 1]] = c[j];
        }
      }
    }
  }
  for (int t = 0; t < (int)(31); t++) {
    F[t + 1] = vector<vector<long long> >(m, vector<long long>(m, INF));
    for (int i = 0; i < (int)(m); i++)
      for (int j = 0; j < (int)(m); j++) {
        for (int h = 0; h < (int)(m); h++)
          F[t + 1][i][j] = min(F[t + 1][i][j], F[t][i][h] + F[t][h][j]);
      }
  }
  vector<pair<int, int> > ps(q);
  for (int i = 0; i < (int)(q); i++) {
    int p, wp;
    cin >> p >> wp;
    ps[i] = make_pair(p, wp);
    W[p] = wp;
  }
  vector<long long> cur(m, INF);
  cur[0] = 0;
  int pos = 1;
  sort((ps).begin(), (ps).end());
  int ed = n - x + 1;
  for (int i = 0; i < (int)(ps.size()); i++) {
    int p = ps[i].first;
    int wp = ps[i].second;
    pos = jump_to(pos, min(ed, p - k), cur);
    disp(pos, cur);
    pos = walk_to(pos, min(ed, p), wp, cur);
    disp(pos, cur);
  }
  pos = jump_to(pos, ed, cur);
  disp(pos, cur);
  cout << cur[0] << endl;
  return 0;
}
