#include <bits/stdc++.h>
using namespace std;
long long x, k, n, q, iinf, counter = 0, c[100];
map<long long, long long> inv, mapi, special;
long long dp[75][75], res[75], res1[75], reserv[75][75], haha[75][75];
long long hshit(long long i) {
  long long jj = i, cnt = 0;
  while (i > 0) {
    if (i % 2) cnt++;
    i /= 2;
  }
  i = jj;
  if (cnt != x) {
    return 0;
  }
  mapi[i] = counter;
  inv[counter] = i;
  counter++;
  return 0;
}
long long updatedp() {
  long long i, j, k;
  for (i = 0; i < counter; i++) {
    for (j = 0; j < counter; j++) {
      haha[i][j] = iinf;
    }
  }
  for (i = 0; i < counter; i++) {
    for (j = 0; j < counter; j++) {
      for (k = 0; k < counter; k++) {
        haha[i][k] = min(haha[i][k], dp[i][j] + dp[j][k]);
      }
    }
  }
  for (i = 0; i < counter; i++) {
    for (j = 0; j < counter; j++) {
      dp[i][j] = haha[i][j];
    }
  }
}
long long updateres() {
  long long i, j;
  for (i = 0; i < counter; i++) {
    res1[i] = iinf;
  }
  for (i = 0; i < counter; i++) {
    for (j = 0; j < counter; j++) {
      res1[j] = min(res1[j], res[i] + dp[i][j]);
    }
  }
  for (i = 0; i < counter; i++) {
    res[i] = res1[i];
  }
  return 0;
}
long long updatefrom(long long s, long long e) {
  e = min(e, n);
  if (e <= s) {
    return 0;
  }
  long long i, j;
  long long len = e - s;
  for (i = 0; i < counter; i++) {
    for (j = 0; j < counter; j++) {
      dp[i][j] = reserv[i][j];
    }
  }
  while (len > 0) {
    if (len % 2) {
      updateres();
    }
    updatedp();
    len /= 2;
  }
  return 0;
}
long long initiall(long long val) {
  long long wow1, wow = inv[val];
  if (wow % 2 == 0) {
    reserv[val][mapi[wow / 2]] = 0;
    return 0;
  }
  wow1 = wow;
  wow /= 2;
  long long i, j;
  for (i = 0; i < k; i++) {
    if (wow & (1LL << i)) {
      continue;
    }
    wow1 = wow + (1 << i);
    reserv[val][mapi[wow1]] = c[i + 1];
  }
  return 0;
}
long long manual(long long s, long long e) {
  e = min(e, n);
  if (e <= s) return 0;
  long long i, j, p, wow, wow1, wow2;
  for (i = s; i < e; i++) {
    for (j = 0; j < counter; j++) {
      res1[j] = iinf;
    }
    for (j = 0; j < counter; j++) {
      wow = inv[j];
      if (wow % 2 == 0) {
        res1[mapi[wow / 2]] = min(res1[mapi[wow / 2]], res[j]);
        continue;
      }
      wow2 = wow;
      wow2 = mapi[wow2];
      wow /= 2;
      for (p = 0; p < k; p++) {
        if ((wow & (1LL << p)) == 0) {
          if (special.find(i + p + 1) != special.end()) {
            wow1 = wow + (1 << p);
            wow1 = mapi[wow1];
            res1[wow1] =
                min(res1[wow1], res[wow2] + c[p + 1] + special[i + p + 1]);
          } else {
            wow1 = wow + (1 << p);
            wow1 = mapi[wow1];
            res1[wow1] = min(res1[wow1], res[wow2] + c[p + 1]);
          }
        }
      }
    }
    for (j = 0; j < counter; j++) {
      res[j] = res1[j];
    }
  }
  return 0;
}
long long sp[123], wt[123];
vector<pair<long long, long long> > vec;
int main() {
  std::ios::sync_with_stdio(false);
  iinf = (1000 * 1000 * 1000 + 5);
  iinf *= (1000 * 1000 * 1000 + 5);
  cin >> x >> k >> n >> q;
  n -= x;
  n++;
  long long i, j;
  for (i = 1; i < k + 1; i++) {
    cin >> c[i];
  }
  long long init = (1 << x) - 1;
  for (i = 0; i < (1 << k); i++) {
    hshit(i);
  }
  for (i = 0; i < counter; i++) {
    for (j = 0; j < counter; j++) {
      reserv[i][j] = iinf;
      res[j] = iinf;
    }
  }
  for (i = 0; i < counter; i++) {
    initiall(i);
  }
  res[mapi[init]] = 0;
  q++;
  sp[0] = (1000 * 1000 * 1000 + 5);
  wt[0] = (1000 * 1000 * 1000 + 5);
  special[(1000 * 1000 * 1000 + 5)] = (1000 * 1000 * 1000 + 5);
  vec.push_back(make_pair(sp[0], wt[0]));
  for (i = 1; i < q; i++) {
    cin >> sp[i] >> wt[i];
    special[sp[i]] = wt[i];
    vec.push_back(make_pair(sp[i], wt[i]));
  }
  sort(vec.begin(), vec.end());
  for (i = 0; i < q; i++) {
    sp[i] = vec[i].first;
    wt[i] = vec[i].second;
  }
  long long previ = 1;
  for (i = 0; i < q; i++) {
    updatefrom(previ, sp[i] - k);
    previ = max(previ, sp[i] - k);
    manual(max(previ, sp[i] - k), sp[i]);
    previ = max(previ, sp[i]);
  }
  cout << res[mapi[init]] << endl;
  return 0;
}
