#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  bool f = 0;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar()) f = (ch == '-');
  for (; isdigit(ch); ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);
  return f ? -x : x;
}
const int N = 72;
int x, k, n, q, id, c[N], cnt[1 << 10], bel[1 << 10];
pair<int, int> stn[N];
struct mar {
  long long a[N][N];
  mar() {
    memset(a, 0x3f, sizeof(a));
    for (int i = 1; i <= id; ++i) a[i][i] = 0;
  }
  inline mar friend operator*(mar a, mar b) {
    mar c;
    memset(&c, 0x3f, sizeof(c));
    for (int i = 1; i <= id; ++i)
      for (int j = 1; j <= id; ++j)
        for (int k = 1; k <= id; ++k)
          c.a[i][j] = min(c.a[i][j], a.a[i][k] + b.a[k][j]);
    return c;
  }
  inline mar friend operator^(mar d, int b) {
    mar a;
    for (; b; b >>= 1, d = d * d)
      if (b & 1) a = a * d;
    return a;
  }
} one;
int main() {
  x = read();
  k = read();
  n = read();
  q = read();
  for (int i = 1; i < (1 << k); ++i) cnt[i] = cnt[i >> 1] + (i & 1);
  memset(&one, 0x3f, sizeof(one));
  for (int i = 1; i < (1 << k); ++i) {
    if (cnt[i] == x) bel[i] = ++id;
    if (bel[i >> 1]) one.a[bel[i]][bel[i >> 1]] = 0;
  }
  for (int i = 1; i <= k; ++i) {
    c[i] = read();
    for (int j = 1; j < (1 << k); j += 2)
      if (bel[j] && !(j & (1 << i)))
        one.a[bel[j]][bel[(j | (1 << i)) >> 1]] = c[i];
  }
  int now = 1;
  mar ans;
  long long Ans;
  for (int i = 1; i <= q; ++i) stn[i].first = read(), stn[i].second = read();
  sort(stn + 1, stn + 1 + q);
  for (int i = 1; i <= q; ++i) {
    int p = stn[i].first, v = stn[i].second;
    if (p > n - x) {
      Ans += v;
      continue;
    }
    if (p > now) ans = ans * (one ^ (p - now));
    now = p;
    for (int s = 1; s < (1 << k); s += 2)
      if (bel[s])
        for (int j = 1; j <= id; ++j) ans.a[j][bel[s]] += v;
  }
  if (now < n - x + 1) ans = ans * (one ^ (n - x + 1 - now));
  printf("%lld\n", Ans + ans.a[bel[(1 << x) - 1]][bel[(1 << x) - 1]]);
  return 0;
}
