#include <bits/stdc++.h>
using namespace std;
const int maxn = 11, maxq = 31;
struct Tp {
  int w, v;
} p[maxq];
int x, k, n, q, N, c[maxn];
map<int, int> mp;
void init() {
  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].w, &p[i].v), mp[p[i].w] = p[i].v;
}
struct Tmx {
  long long a[73][73];
  void clear() {
    for (int i = 1; i <= N; ++i)
      for (int j = 1; j <= N; ++j) a[i][j] = 1e18;
  }
} I;
Tmx operator*(Tmx a, Tmx b) {
  Tmx c;
  c.clear();
  for (int i = 1; i <= N; ++i)
    for (int k = 1; k <= N; ++k)
      for (int j = 1; j <= N; ++j)
        c.a[i][j] = min(c.a[i][j], a.a[i][k] + b.a[k][j]);
  return c;
}
int s[73], Id[1111];
void preset() {
  N = 0;
  for (int i = 0; i < 1 << k; ++i)
    if (__builtin_popcount(i) == x) s[++N] = i, Id[i] = N;
  I.clear();
  for (int i = 1; i <= N; ++i) {
    int S = s[i];
    if (S & 1) {
      int t = S >> 1;
      for (int j = 0; j < k; ++j)
        if (~t >> j & 1) I.a[i][Id[t | 1 << j]] = c[j + 1];
    } else
      I.a[i][Id[S >> 1]] = 0;
  }
}
inline int get(int x) {
  if (mp.find(x) != mp.end()) return mp[x];
  return 0;
}
Tmx power(int t) {
  if (t == 1) return I;
  Tmx res = I, i = I;
  --t;
  for (; t; t >>= 1, i = i * i)
    if (t & 1) res = res * i;
  return res;
}
inline void update(long long &x, long long a) {
  if (a < x) x = a;
}
void work() {
  preset();
  static long long f[73];
  for (int i = 1; i <= N; ++i) f[i] = 1e18;
  f[Id[(1 << x) - 1]] = 0;
  sort(p + 1, p + q + 1, [](Tp a, Tp b) { return a.w < b.w; });
  p[++q].w = n - x + k + 1;
  for (int now = 1, j = 1; now < n - x + 1;) {
    while (p[j].w < now) ++j;
    if (now >= p[j].w - k) {
      static long long g[73];
      for (int i = 1; i <= N; ++i) g[i] = 1e18;
      for (int i = 1; i <= N; ++i) {
        int S = s[i];
        if (S & 1) {
          int t = S >> 1;
          for (int j = 0; j < k; ++j)
            if (~t >> j & 1)
              update(g[Id[t | 1 << j]], f[i] + c[j + 1] + get(now + 1 + j));
        } else
          update(g[Id[S >> 1]], f[i]);
      }
      memcpy(f, g, sizeof(f));
      ++now;
    } else {
      int step = p[j].w - k - now;
      Tmx A = power(step), B;
      B.clear();
      for (int i = 1; i <= N; ++i) B.a[1][i] = f[i];
      B = B * A;
      for (int i = 1; i <= N; ++i) f[i] = B.a[1][i];
      now = p[j].w - k;
    }
  }
  cout << f[Id[(1 << x) - 1]] << endl;
}
int main() {
  init();
  work();
  return 0;
}
