#include <bits/stdc++.h>
using namespace std;
const int MN = 70;
struct mat {
  long long T[MN][MN];
  void O() {
    for (int i = 0; i < MN; i++)
      for (int j = 0; j < MN; j++) T[i][j] = 1e18;
  }
};
mat mult(mat a, mat b) {
  mat ret;
  ret.O();
  for (int i = 0; i < MN; i++) {
    for (int j = 0; j < MN; j++) {
      for (int k = 0; k < MN; k++) {
        ret.T[i][j] = min(ret.T[i][j], a.T[i][k] + b.T[k][j]);
      }
    }
  }
  return ret;
}
mat exp(mat x, int n) {
  mat ret;
  ret.O();
  for (int i = 0; i < MN; i++) ret.T[i][i] = 0;
  while (n) {
    if (n & 1) ret = mult(ret, x);
    x = mult(x, x);
    n >>= 1;
  }
  return ret;
}
int X, K, N, Q;
int C[10];
pair<int, int> W[30];
map<int, int> chk;
vector<int> Mask;
int inv[256];
mat P, Y, A;
int main() {
  scanf("%d %d %d %d", &X, &K, &N, &Q);
  for (int i = 1; i <= K; i++) {
    scanf("%d", &C[i]);
  }
  for (int i = 0; i < Q; i++) {
    scanf("%d %d", &W[i].first, &W[i].second);
    W[i].first--;
    chk[W[i].first] = W[i].second;
  }
  sort(W, W + Q);
  for (int i = 0; i < (1 << K); i++) {
    int cnt = 0;
    for (int j = 0; j < K; j++)
      if (i & (1 << j)) cnt++;
    if (cnt == X) Mask.push_back(i);
  }
  for (int i = 0; i < Mask.size(); i++) inv[Mask[i]] = i;
  A.O();
  A.T[0][0] = 0;
  P.O();
  for (int i = 0; i < Mask.size(); i++) {
    int mask = Mask[i];
    if (!(mask & 1)) {
      P.T[i][inv[mask >> 1]] = 0;
      continue;
    }
    for (int j = 1; j <= K; j++) {
      if (mask & (1 << j)) continue;
      int mask2 = mask ^ (1 << j);
      mask2 >>= 1;
      P.T[i][inv[mask2]] = C[j];
    }
  }
  int cur_len = X;
  for (int q = Q - 1; q >= 0; q--) {
    int len = N - W[q].first;
    if (len > cur_len) {
      A = mult(exp(P, len - cur_len), A);
      cur_len = len;
    }
    while (cur_len < N - W[q].first + K && cur_len < N) {
      int p = N - cur_len - 1;
      Y.O();
      for (int i = 0; i < Mask.size(); i++) {
        int mask = Mask[i];
        if (!(mask & 1)) {
          Y.T[i][inv[mask >> 1]] = 0;
          continue;
        }
        for (int j = 1; j <= K; j++) {
          if (mask & (1 << j)) continue;
          int mask2 = mask ^ (1 << j);
          mask2 >>= 1;
          Y.T[i][inv[mask2]] =
              C[j] + (chk.find(p + j) != chk.end() ? chk[p + j] : 0);
        }
      }
      A = mult(Y, A);
      cur_len++;
    }
  }
  if (N > cur_len) {
    A = mult(exp(P, N - cur_len), A);
  }
  printf("%lld", A.T[inv[(1 << X) - 1]][0]);
}
