#include <bits/stdc++.h>
const int maxk = 10;
const long long INF = 1e18;
struct node {
  int p, wp;
  bool operator<(const node &tmp) const { return p < tmp.p; }
};
struct node ai[35];
int n, id[1 << maxk], x, k, q, ci[maxk], num, S[105];
long long f[105][105][32], dp[30][105], g[105];
inline void read(int &now) {
  char Cget;
  now = 0;
  int if_z = 1;
  while (!isdigit(Cget = getchar()))
    if (Cget == '-') if_z = -1;
  while (isdigit(Cget)) {
    now = now * 10 + Cget - '0';
    Cget = getchar();
  }
  now *= if_z;
}
inline int count(int s) {
  int res = 0;
  while (s > 0) {
    if (s & 1) ++res;
    s >>= 1;
  }
  return res;
}
int main() {
  read(x);
  read(k);
  read(n);
  read(q);
  for (int i = 1; i <= k; i++) read(ci[i]);
  for (int i = 0; i < (1 << k); i++)
    if (count(i) == x) {
      id[i] = ++num;
      S[num] = i;
    }
  for (int i = 1; i <= num; i++)
    for (int v = 1; v <= num; v++)
      for (int e = 0; e <= 30; e++) f[i][v][e] = INF;
  for (int i = 1, s, s_; i <= num; i++) {
    s = S[i];
    if (s & 1) {
      s_ = s >> 1;
      for (int v = 0; v < k; v++)
        if (!(s_ & (1 << v))) f[id[s]][id[s_ | (1 << v)]][0] = ci[v + 1];
    } else
      f[id[s]][id[s >> 1]][0] = 0;
  }
  for (int i = 1; i <= 30; i++)
    for (int s = 1; s <= num; s++)
      for (int t = 1; t <= num; t++)
        for (int e = 1; e <= num; e++)
          if (f[s][e][i - 1] != INF && f[e][t][i - 1] != INF &&
              f[s][e][i - 1] + f[e][t][i - 1] < f[s][t][i])
            f[s][t][i] = f[s][e][i - 1] + f[e][t][i - 1];
  for (int i = 1; i <= q; i++) {
    read(ai[i].p);
    read(ai[i].wp);
  }
  std::sort(ai + 1, ai + q + 1);
  ai[0].p = 1;
  long long tmpans = 0;
  while (ai[q].p > n - x + 1 && q > 0) tmpans += ai[q--].wp;
  if (ai[q].p < n - x + 1) {
    ai[++q].p = n - x + 1;
    ai[q].wp = 0;
  }
  memset(dp, 0x3f, sizeof(dp));
  dp[0][1] = 0;
  for (int i = 1; i <= q; i++) {
    int tmp = ai[i].p - ai[i - 1].p;
    for (int v = 1; v <= num; v++) dp[i][v] = dp[i - 1][v];
    for (int v = 0; v <= 30; v++)
      if ((1 << v) & tmp) {
        memset(g, 0x3f, sizeof(g));
        for (int e = 1; e <= num; e++)
          for (int z = 1; z <= num; z++)
            if (dp[i][e] <= INF && f[e][z][v] <= INF)
              g[z] = std::min(dp[i][e] + f[e][z][v], g[z]);
        for (int e = 1; e <= num; e++) dp[i][e] = g[e];
      }
    for (int v = 1; v <= num; v++) {
      int s = S[v];
      if ((s & 1) && dp[i][v] < INF) dp[i][v] += ai[i].wp;
    }
  }
  std::cout << dp[q][1] + tmpans;
  return 0;
}
