#include <bits/stdc++.h>
using namespace std;
int w[100], cnt, mp[1 << 8];
vector<int> cs;
struct node {
  int pos, w, l, r;
  inline friend bool operator<(const node a, const node b) {
    return a.pos < b.pos;
  }
} st[105];
struct Vector {
  long long c[105];
  inline void out() {
    for (int i = 0; i < cnt; ++i) cout << c[i] << endl;
  }
  inline void C() { memset(c, 0x3f, sizeof c); }
} F;
struct Matrix {
  long long c[105][105];
  inline void C() { memset(c, 0x3f, sizeof c); }
  inline void I() {
    C();
    for (int i = 0; i < cnt; ++i) c[i][i] = 1;
  }
  inline void out() {
    for (int i = 0; i < cnt; ++i, puts(""))
      for (int j = 0; j < cnt; ++j) cout << c[i][j] << ' ';
  }
  inline friend Matrix operator*(const Matrix a, const Matrix b) {
    Matrix c;
    c.C();
    for (int k = 0; k < cnt; ++k)
      for (int i = 0; i < cnt; ++i)
        for (int j = 0; j < cnt; ++j)
          c.c[i][j] = min(c.c[i][j], a.c[i][k] + b.c[k][j]);
    return c;
  }
} G[30], T;
void operator*=(Vector &a, Matrix b) {
  Vector c;
  c.C();
  for (int i = 0; i < cnt; ++i)
    for (int j = 0; j < cnt; ++j) c.c[j] = min(c.c[j], b.c[j][i] + a.c[i]);
  a = c;
  return;
}
inline void solve(int x) {
  for (int i = 29; ~i; --i)
    if ((x >> i) & 1) F *= G[i];
}
int main() {
  int x, k, n, q;
  cin >> x >> k >> n >> q;
  for (int i = 1; i <= k; ++i) cin >> w[i];
  for (int i = 1; i <= q; ++i) cin >> st[i].pos >> st[i].w;
  sort(st + 1, st + q + 1);
  for (int i = 1; i < 1 << k; ++i) {
    int t = 0;
    for (int j = 0; j < k; ++j)
      if ((i >> j) & 1) ++t;
    if (t == x) cs.push_back(i), mp[i] = cs.size() - 1;
  }
  cnt = cs.size(), G[0].C();
  for (int i = 0; i < cnt; ++i) {
    int x = cs[i];
    if (x & 1)
      for (int j = 1; j <= k; ++j) {
        if (!((x >> j) & 1)) G[0].c[mp[(x | 1 << j) >> 1]][i] = w[j];
      }
    else
      G[0].c[mp[x >> 1]][i] = 0;
  }
  for (int i = 1; i < 30; ++i) G[i] = G[i - 1] * G[i - 1];
  F.C();
  F.c[mp[(1 << x) - 1]] = 0;
  int las = 0;
  for (int i = 1; i <= q; ++i) st[i].l = st[i].pos - k, st[i].r = st[i].pos - 1;
  for (int i = 1; i <= q; ++i) {
    solve(max(0, st[i].pos - k - 1 - las));
    int L = max(las + 1, st[i].pos - k), R = min(st[i].pos - 1, n - x);
    for (int j = L; j <= R; ++j) {
      T.C();
      for (int l = 0; l < cnt; ++l) {
        int x = cs[l];
        if (x & 1)
          for (int e = 1; e <= k; ++e) {
            if (!((x >> e) & 1)) {
              T.c[mp[(x | 1 << e) >> 1]][l] = w[e];
              for (int et = i; et <= q; ++et)
                if (j + e == st[et].pos)
                  T.c[mp[(x | 1 << e) >> 1]][l] += st[et].w;
            }
          }
        else
          T.c[mp[x >> 1]][l] = 0;
      }
      F *= T;
    }
    las = st[i].pos - 1;
  }
  solve(max(0, n - x - las));
  cout << F.c[mp[(1 << x) - 1]] << endl;
  return 0;
}
