#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
struct mat {
  long long a[75][75];
  int n = 70;
  mat() {
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) {
        a[i][j] = inf;
      }
    }
  }
  void clear() {
    for (int i = 1; i <= n; i++) {
      a[i][i] = 0;
    }
  }
  mat operator*(const mat &b) const {
    mat res;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) {
        for (int k = 1; k <= n; k++) {
          res.a[i][j] = min(res.a[i][j], a[i][k] + b.a[k][j]);
        }
      }
    }
    return res;
  }
} f;
struct node {
  int l, r;
} q[30], r[30];
struct block {
  int x, w;
} w[30];
bool cmp(block x, block y) { return x.x < y.x; }
int X, K, n, Q, c[75], state[260], id[75], cnt;
long long a[75], b[75];
map<int, int> mp;
mat pw(mat x, int y) {
  mat res;
  res.clear();
  while (y) {
    if (y & 1) {
      res = res * x;
    }
    x = x * x;
    y >>= 1;
  }
  return res;
}
int main() {
  scanf("%d%d%d%d", &X, &K, &n, &Q);
  for (int i = 1; i <= K; i++) {
    scanf("%d", &c[i]);
  }
  for (int i = 0; i < Q; i++) {
    scanf("%d%d", &w[i].x, &w[i].w);
  }
  sort(w, w + Q, cmp);
  long long sum = 0;
  while (Q && w[Q - 1].x > n - X) {
    Q--;
    sum += w[Q].w;
  }
  for (int i = 0; i < Q; i++) {
    r[i].l = max(w[i].x - K, 2);
    r[i].r = w[i].x;
    mp[w[i].x] = w[i].w;
  }
  int k = 0;
  for (int i = 0; i < Q; i++) {
    if (k && q[k].r + 1 >= r[i].l) {
      q[k].r = r[i].r;
    } else {
      k++;
      q[k] = r[i];
    }
  }
  for (int mask = 0; mask < (1 << K); mask++) {
    if (__builtin_popcount(mask) != X) {
      continue;
    }
    cnt++;
    state[mask] = cnt;
    id[cnt] = mask;
  }
  for (int i = 1; i <= cnt; i++) {
    int mask = id[i] >> 1;
    if (!(id[i] & 1)) {
      f.a[i][state[mask]] = 0;
      continue;
    }
    for (int j = 1; j <= K; j++) {
      if (!(id[i] & (1 << j))) {
        f.a[i][state[mask | (1 << (j - 1))]] = c[j];
      }
    }
  }
  mat now;
  now.a[1][1] = 0;
  q[0].r = 1;
  for (int i = 1; i <= k; i++) {
    now = now * pw(f, q[i].l - q[i - 1].r - 1);
    for (int j = 1; j <= cnt; j++) {
      a[j] = now.a[1][j];
    }
    for (int j = q[i].l; j <= q[i].r; j++) {
      for (int l = 1; l <= cnt; l++) {
        b[l] = inf;
      }
      for (int l = 1; l <= cnt; l++) {
        int mask = id[l] >> 1;
        if (!(id[l] & 1)) {
          b[state[mask]] = min(b[state[mask]], a[l]);
          continue;
        }
        for (int h = 1; h <= K; h++) {
          if (!(id[l] & (1 << h))) {
            int now = mask | (1 << (h - 1));
            if (mp.count(j + h - 1)) {
              b[state[now]] = min(b[state[now]], a[l] + c[h] + mp[j + h - 1]);
            } else {
              b[state[now]] = min(b[state[now]], a[l] + c[h]);
            }
          }
        }
      }
      for (int l = 1; l <= cnt; l++) {
        a[l] = b[l];
      }
    }
    for (int j = 1; j <= cnt; j++) {
      now.a[1][j] = a[j];
    }
  }
  now = now * pw(f, n - X + 1 - q[k].r);
  cout << sum + now.a[1][1] << endl;
  return 0;
}
