#include <bits/stdc++.h>
using namespace std;
char getc() {
  char c = getchar();
  while ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z') && (c < '0' || c > '9'))
    c = getchar();
  return c;
}
int gcd(int n, int m) { return m == 0 ? n : gcd(m, n % m); }
int read() {
  int x = 0, f = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9')
    x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
  return x * f;
}
int n, m, k, q, c[10], id[1 << 8], t;
map<int, int> d;
struct data {
  int x, y;
  bool operator<(const data& a) const { return x < a.x; }
} p[30];
struct matrix {
  int n;
  long long a[80][80];
  matrix operator*(const matrix& b) const {
    matrix c;
    c.n = n;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < b.n; j++) c.a[i][j] = 1000000000000000000ll;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < b.n; j++)
        for (int k = 0; k < b.n; k++)
          c.a[i][j] = min(c.a[i][j], a[i][k] + b.a[k][j]);
    return c;
  }
} f, a, g;
matrix power(matrix a, int k) {
  matrix c;
  c.n = a.n;
  for (int i = 0; i < t; i++)
    for (int j = 0; j < t; j++) c.a[i][j] = 1000000000000000000ll;
  for (int i = 0; i < t; i++) c.a[i][i] = 0;
  for (; k; k >>= 1, a = a * a)
    if (k & 1) c = c * a;
  return c;
}
signed main() {
  n = read(), m = read(), k = read(), q = read();
  for (int i = 1; i <= m; i++) c[i] = read();
  for (int i = 1; i <= q; i++)
    p[i].x = read(), p[i].y = read(), d[p[i].x] = p[i].y;
  sort(p + 1, p + q + 1);
  memset(id, 255, sizeof(id));
  for (int i = 0; i < (1 << m); i++) {
    int cnt = 0, j = i;
    while (j) j ^= j & -j, cnt++;
    if (cnt == n) id[i] = t++;
  }
  a.n = t;
  for (int i = 0; i < t; i++)
    for (int j = 0; j < t; j++) a.a[i][j] = 1000000000000000000ll;
  for (int i = 0; i < (1 << m); i++)
    if (id[i] >= 0) {
      if (i & 1) {
        for (int x = 1; x <= m; x++)
          if (!(i & (1 << x))) a.a[id[i]][id[(i | (1 << x)) >> 1]] = c[x];
      } else
        a.a[id[i]][id[i >> 1]] = 0;
    }
  f.n = 1;
  for (int i = 0; i < t; i++) f.a[0][i] = 1000000000000000000ll;
  f.a[0][id[(1 << n) - 1]] = 0;
  int cur = 1;
  for (int i = 1; i <= q; i++) {
    if (p[i].x - 10 >= cur)
      f = f * power(a, p[i].x - 10 - cur), cur = p[i].x - 10;
    int u = i;
    while (u < q && p[u + 1].x - p[u].x <= 10) u++;
    while (cur < p[u].x && cur < k - n + 1) {
      g.n = 1;
      for (int x = 0; x < t; x++) g.a[0][x] = 1000000000000000000ll;
      for (int j = 0; j < (1 << m); j++)
        if (id[j] >= 0) {
          if (j & 1) {
            for (int x = 1; x <= m; x++)
              if (!(j & (1 << x)))
                g.a[0][id[(j | (1 << x)) >> 1]] =
                    min(g.a[0][id[(j | (1 << x)) >> 1]],
                        f.a[0][id[j]] + c[x] + d[cur + x]);
          } else
            g.a[0][id[j >> 1]] = min(g.a[0][id[j >> 1]], f.a[0][id[j]]);
        }
      f = g;
      cur++;
    }
    i = u;
  }
  f = f * power(a, k - n - cur + 1);
  cout << f.a[0][id[(1 << n) - 1]];
  return 0;
}
