#include <bits/stdc++.h>
using std::cerr;
using std::cin;
using std::max;
using std::min;
int n, m, K, Q, val[100], MaxS, tot, id[300], S[100];
long long f[100], g[100], ans;
std::map<int, int> mp;
struct info {
  int l, r, v;
  friend bool operator<(info t1, info t2) {
    return t1.l < t2.l || t1.l == t2.l && t1.r < t2.r;
  }
} A[100], B[100];
struct Matrix {
  long long v[100][100];
  void init() {
    for (int i = 1; i <= tot; i++)
      for (int j = 1; j <= tot; j++) v[i][j] = 1e18;
  }
  friend Matrix operator*(Matrix t1, Matrix t2) {
    Matrix res;
    res.init();
    for (int i = 1; i <= tot; i++)
      for (int j = 1; j <= tot; j++)
        for (int k = 1; k <= tot; k++)
          res.v[i][k] = min(res.v[i][k], t1.v[i][j] + t2.v[j][k]);
    return res;
  }
} mat, tp;
void Pow(int x) {
  for (tp = mat; x; x >>= 1, tp = tp * tp)
    if (x & 1) {
      for (int i = 1; i <= tot; i++)
        for (int j = 1; j <= tot; j++) g[i] = min(g[i], f[j] + tp.v[j][i]);
      for (int i = 1; i <= tot; i++) f[i] = g[i], g[i] = 1e18;
    }
}
void Solve(int x) {
  for (int i = 1, nS; i <= tot; i++)
    if (S[i] & 1) {
      nS = S[i] >> 1;
      for (int j = 1; j <= K; j++)
        if (!(nS >> j - 1 & 1))
          g[id[nS | (1 << j - 1)]] =
              min(g[id[nS | (1 << j - 1)]], f[i] + val[j] + mp[x + j - 1]);
    } else
      g[id[S[i] >> 1]] = min(g[id[S[i] >> 1]], f[i]);
  for (int i = 1; i <= tot; i++) f[i] = g[i], g[i] = 1e18;
}
int main() {
  scanf("%d%d%d%d", &m, &K, &n, &Q);
  for (int i = 1; i <= K; i++) scanf("%d", &val[i]);
  for (int i = 1; i <= Q; i++) scanf("%d%d", &A[i].l, &A[i].v);
  std::sort(A + 1, A + 1 + Q);
  for (; Q && A[Q].l >= n - m + 1; Q--) ans += A[Q].v;
  for (int i = 1; i <= Q; i++)
    mp[A[i].l] = A[i].v, A[i].r = A[i].l, A[i].l = max(A[i].l - K, 2);
  for (int i = 1; i <= Q; i++)
    if (tot && A[i].l <= B[tot].r + 1)
      B[tot].r = A[i].r;
    else
      B[++tot] = A[i];
  Q = tot, tot = 0, MaxS = (1 << K) - 1;
  for (int i = 1, sz; i <= MaxS; i++) {
    sz = 0;
    for (int j = 0; j < K; j++) sz += i >> j & 1;
    if (sz == m) S[id[i] = ++tot] = i;
  }
  mat.init();
  for (int i = 1, nS; i <= tot; i++)
    if (S[i] & 1) {
      nS = S[i] >> 1;
      for (int j = 1; j <= K; j++)
        if (!(nS >> j - 1 & 1)) mat.v[i][id[nS | (1 << j - 1)]] = val[j];
    } else
      mat.v[i][id[S[i] >> 1]] = 0;
  for (int i = 1; i <= tot; i++) f[i] = g[i] = 1e18;
  f[1] = 0, B[0].r = 1;
  for (int i = 1; i <= Q; i++) {
    Pow(B[i].l - B[i - 1].r - 1);
    for (int j = B[i].l; j <= B[i].r; j++) Solve(j);
  }
  Pow(n - m + 1 - B[Q].r);
  printf("%I64d\n", ans + f[1]);
  return 0;
}
