#include <bits/stdc++.h>
using namespace std;
const int Maxn = 72, Maxk = 10;
const long long inf = (1LL << 61);
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();
  return x * f;
}
unordered_map<int, int> val;
int X, k, n, q, N = 0, to[1 << 8], s[Maxn];
long long c[Maxk];
struct P {
  int x, y;
} p[30];
bool cmp(P a, P b) { return a.x < b.x; }
struct Matrix {
  long long v[Maxn][Maxn];
} one, M, st;
Matrix operator*(Matrix a, Matrix b) {
  Matrix c;
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= N; j++) {
      c.v[i][j] = inf;
      for (int k = 1; k <= N; k++)
        if (a.v[i][k] != inf && b.v[k][j] != inf)
          c.v[i][j] = min(c.v[i][j], a.v[i][k] + b.v[k][j]);
    }
  return c;
}
Matrix operator^(Matrix x, int y) {
  Matrix re = one, t = x;
  while (y) {
    if (y & 1) re = re * t;
    t = t * t;
    y >>= 1;
  }
  return re;
}
void print(Matrix x) {
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) printf("%lld ", x.v[i][j]);
    puts("");
  }
  putchar('\n');
}
int g(int x) {
  int re = 0;
  while (x) re += (x & 1), x >>= 1;
  return re;
}
long long f[Maxk][1 << 8];
int main() {
  X = read(), k = read(), n = read(), q = read();
  for (int i = 1; i <= k; i++) c[i] = read();
  for (int i = 1; i <= q; i++)
    p[i].x = read(), p[i].y = read(), val[p[i].x] = p[i].y;
  sort(p + 1, p + 1 + q, cmp);
  for (int S = 0; S < (1 << k); S++)
    if (g(S) == X) s[++N] = S, to[S] = N;
  for (int i = 1; i <= N; i++)
    for (int j = 1; j <= N; j++) M.v[i][j] = st.v[i][j] = one.v[i][j] = inf;
  st.v[1][to[(1 << X) - 1]] = 0;
  for (int i = 1; i <= N; i++) one.v[i][i] = 0;
  for (int i = 1; i <= N; i++)
    if (s[i] & 1) {
      for (int j = 1; j <= k; j++)
        if (!((1 << j) & s[i])) {
          int S = (s[i] | (1 << j)) >> 1;
          M.v[i][to[S]] = c[j];
        }
    } else
      M.v[i][to[s[i] >> 1]] = 0;
  int now = 1;
  p[q + 1].x = n - X + k + 1;
  for (int i = 1; i <= q; i++) {
    if (p[i].x - now - k >= 0)
      st = st * (M ^ (p[i].x - now - k)), now = p[i].x - k;
    int pos = min(p[i].x, p[i + 1].x - k);
    for (int j = 0; j <= pos - now; j++)
      for (int l = 1; l <= N; l++) f[j][s[l]] = inf;
    for (int j = 1; j <= N; j++) f[0][s[j]] = st.v[1][j];
    for (int j = 0; j < pos - now; j++)
      for (int l = 1; l <= N; l++)
        if (s[l] & 1) {
          for (int u = 1; u <= k; u++)
            if (!((1 << u) & s[l]) && f[j][s[l]] != inf)
              f[j + 1][(s[l] | (1 << u)) >> 1] =
                  min(f[j + 1][(s[l] | (1 << u)) >> 1],
                      f[j][s[l]] + c[u] + val[now + j + u]);
        } else
          f[j + 1][s[l] >> 1] = min(f[j + 1][s[l] >> 1], f[j][s[l]]);
    if (pos >= now) {
      for (int j = 1; j <= N; j++) st.v[1][j] = f[pos - now][s[j]];
      now = pos;
    }
  }
  st = st * (M ^ (n - X + 1 - now));
  printf("%lld", st.v[1][to[(1 << X) - 1]]);
}
