#include <bits/stdc++.h>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3f3f;
int n, k, x, q, c[10], cnt, id[1 << 8];
pair<int, int> p[28];
int lim;
struct Mat {
  long long s[73][73];
  Mat() { memset(s, 0x3f, sizeof s); }
  Mat operator*(const Mat &B) const {
    Mat ret;
    for (int k = 1; k <= cnt; k++)
      for (int i = 1; i <= lim; i++)
        if (s[i][k] < inf)
          for (int j = 1; j <= cnt; j++)
            if (B.s[k][j] < inf)
              ret.s[i][j] = min(ret.s[i][j], s[i][k] + B.s[k][j]);
    return ret;
  }
} f, g, pw[30];
void operator*=(Mat &f, int t) {
  lim = 1;
  for (int i = 0; t; t >>= 1, i++)
    if (t & 1) f = f * pw[i];
  lim = cnt;
}
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 = 1; i <= q; i++) scanf("%d%d", &p[i].first, &p[i].second);
  sort(p + 1, p + 1 + q);
  for (int s = 1; s < 1 << k; s++)
    if (__builtin_popcount(s) == x) id[s] = ++cnt;
  for (int s = 1; s < 1 << k; s++)
    if (id[s]) {
      if (!(s & 1))
        g.s[id[s]][id[s >> 1]] = 0;
      else
        for (int i = 1; i <= k; i++)
          if (!(s >> i & 1)) g.s[id[s]][id[(s ^ 1 << i) >> 1]] = c[i];
    }
  f.s[1][1] = 0, pw[0] = g, lim = cnt;
  for (int i = 1; 1 << i <= n; i++) pw[i] = pw[i - 1] * pw[i - 1];
  int now = 1;
  long long sum = 0;
  for (int i = 1; i <= q; i++) {
    if (p[i].first > n - x) {
      sum += p[i].second;
      continue;
    }
    f *= (p[i].first - now), now = p[i].first;
    for (int s = 1; s < 1 << k; s += 2)
      if (id[s]) f.s[1][id[s]] += p[i].second;
  }
  f *= (n - x + 1 - now);
  printf("%lld\n", f.s[1][1] + sum);
}
