#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long Hashimoto = 0;
  bool Kanna = 1;
  char I_Love = getchar();
  while (I_Love < '0' || I_Love > '9') {
    if (I_Love == '-') Kanna = 0;
    I_Love = getchar();
  }
  while (I_Love >= '0' && I_Love <= '9') {
    Hashimoto = Hashimoto * 10 + I_Love - '0';
    I_Love = getchar();
  }
  return (Kanna ? Hashimoto : -Hashimoto);
}
template <typename T1, typename T2>
inline void Umax(T1 &a, T2 b) {
  if (a < b) a = b;
}
template <typename T1, typename T2>
inline void Umin(T1 &a, T2 b) {
  if (a > b) a = b;
}
struct mat {
  long long a[77][77];
  mat() { memset(a, 0x3f, sizeof(a)); }
  mat operator*(mat &b) {
    mat ret;
    for (int i = 0; i < (77); ++i)
      for (int j = 0; j < (77); ++j)
        for (int k = 0; k < (77); ++k) {
          Umin(ret.a[i][j], a[i][k] + b.a[k][j]);
        }
    return ret;
  }
};
int x, k, n, q;
int maskid[333];
long long w[11];
int tot;
mat pw[30];
long long dp[77];
long long ndp[77];
vector<pair<int, pair<long long, int> > > magic;
long long delta[11] = {};
mat dodo() {
  mat ret;
  for (int i = 0; i < (1 << k); ++i) {
    if (maskid[i]) {
      if (i & 1) {
        for (int j = 1; j < (k + 1); ++j) {
          if (i & (1 << j)) continue;
          ret.a[maskid[i]][maskid[((i | (1 << j)) >> 1)]] = w[j] + delta[j];
        }
      } else {
        ret.a[maskid[i]][maskid[i >> 1]] = 0;
      }
    }
  }
  return ret;
}
void fuck(mat a) {
  memcpy(ndp, dp, sizeof(dp));
  memset(dp, 0x3f, sizeof(dp));
  for (int i = 0; i < (77); ++i)
    for (int j = 0; j < (77); ++j) Umin(dp[i], ndp[j] + a.a[j][i]);
}
void fuck(int x) {
  for (int i = 0; i < (29); ++i) {
    if (x & (1 << i)) {
      fuck(pw[i]);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  memset(dp, 0x3f, sizeof(dp));
  dp[1] = 0;
  cin >> x >> k >> n >> q;
  for (int i = 1; i < (k + 1); ++i) cin >> w[i];
  for (int i = 0; i < (1 << k); ++i)
    if (__builtin_popcount(i) == x) {
      maskid[i] = ++tot;
    }
  pw[0] = dodo();
  for (int i = 0; i < (28); ++i) pw[i + 1] = pw[i] * pw[i];
  for (int i = 0; i < (q); ++i) {
    int p, w;
    cin >> p >> w;
    p--;
    for (int j = 1; j < (k + 1); ++j) {
      int f = p - j;
      if (f < 0 || f >= n - x) continue;
      magic.push_back({f, {w, j}});
    }
  }
  sort(magic.begin(), magic.end());
  ;
  int pre = -1;
  int l = 0;
  while (l < magic.size()) {
    fuck(magic[l].first - pre - 1);
    pre = magic[l].first;
    int r = l;
    while (r < magic.size() && magic[r].first == pre) r++;
    memset(delta, 0, sizeof(delta));
    for (int i = l; i < (r); ++i) {
      delta[magic[i].second.second] += magic[i].second.first;
    }
    fuck(dodo());
    l = r;
  }
  fuck(n - x - pre - 1);
  cout << dp[1] << endl;
  ;
  return 0;
}
