#include <bits/stdc++.h>
using namespace std;
int x, k, n, q, cnt;
long long num[10];
int bel[1 << 10];
struct Square {
  long long num[75][75];
  Square() {
    for (int i = 1; i <= 70; i++) {
      for (int j = 1; j <= 70; j++) num[i][j] = 1e18;
      num[i][i] = 0;
    }
  }
  Square operator*(const Square &a) const {
    Square tmp;
    for (int i = 1; i <= cnt; i++) tmp.num[i][i] = 1e18;
    for (int i = 1; i <= cnt; i++)
      for (int j = 1; j <= cnt; j++)
        for (int k = 1; k <= cnt; k++)
          tmp.num[i][j] = tmp.num[i][j] < (num[i][k] + a.num[k][j])
                              ? tmp.num[i][j]
                              : (num[i][k] + a.num[k][j]);
    return tmp;
  }
  Square operator^(const int &x) {
    if (!x) return Square();
    Square tmp, tmp1;
    int times = x;
    for (int i = 1; i <= cnt; i++)
      for (int j = 1; j <= cnt; j++) tmp1.num[i][j] = num[i][j];
    while (times) {
      if (times & 1) tmp = tmp * tmp1;
      times >>= 1;
      tmp1 = tmp1 * tmp1;
    }
    return tmp;
  }
} one;
struct Stone {
  int place;
  long long val;
} stone[30];
bool calc(int tmp) {
  int many = 0;
  for (int i = 1; i <= 8; i++)
    if (tmp & (1 << (i - 1))) many++;
  return many == x;
}
bool cmp(Stone a, Stone b) { return a.place < b.place; }
int main() {
  scanf("%d%d%d%d", &x, &k, &n, &q);
  for (int i = 0; i <= (1 << k) - 1; i++)
    if (calc(i)) bel[i] = ++cnt;
  for (int i = 1; i <= k; i++) scanf("%lld", &num[i]);
  for (int i = 1; i <= q; i++) scanf("%d%lld", &stone[i].place, &stone[i].val);
  sort(stone + 1, stone + q + 1, cmp);
  for (int i = 1; i <= cnt; i++) one.num[i][i] = 1e18;
  for (int i = 1; i <= (1 << k) - 1; i++) {
    if (i & 1) {
      if (!bel[i]) continue;
      for (int j = 1; j <= k; j++)
        if (!((1 << j) & i)) one.num[bel[i]][bel[((1 << j) | i) >> 1]] = num[j];
    } else if (bel[i])
      one.num[bel[i]][bel[i >> 1]] = 0;
  }
  int now = 1;
  long long sum = 0;
  Square ans;
  for (int i = 1; i <= q; i++) {
    if (stone[i].place > n - x) {
      sum += stone[i].val;
      continue;
    }
    ans = ans * (one ^ (stone[i].place - now)), now = stone[i].place;
    for (int j = 1; j <= (1 << k) - 1; j += 2)
      if (bel[j])
        for (int k = 1; k <= cnt; k++) ans.num[k][bel[j]] += stone[i].val;
  }
  ans = ans * (one ^ (n - x + 1 - now));
  printf("%lld", ans.num[1][1] + sum);
}
