#include <bits/stdc++.h>
using namespace std;
const int N = 30;
const long long inf = 1e18;
vector<int> possibleStates;
int pos[(1 << 10)];
int n, q, x, k, sz;
long long c[N], w[N], p[N];
map<long long, long long> mp;
void compute() {
  memset(pos, -1, sizeof(pos));
  for (int i = 0; i < (1 << k); i++) {
    if (__builtin_popcount(i) == x) {
      pos[i] = possibleStates.size();
      possibleStates.push_back(i);
    }
  }
}
vector<vector<long long> > getMatrix() {
  vector<vector<long long> > ret(sz, vector<long long>(sz, inf));
  for (int i = 0; i < sz; i++) {
    int mask = possibleStates[i];
    if (mask & 1) {
      for (int j = 1; j <= k; j++) {
        if (mask & (1 << j)) continue;
        ret[i][pos[(mask ^ (1 << j)) >> 1]] = c[j];
      }
    } else {
      ret[i][pos[mask >> 1]] = 0;
    }
  }
  return ret;
}
inline vector<vector<long long> > product(vector<vector<long long> > &a,
                                          vector<vector<long long> > &b) {
  vector<vector<long long> > ret(sz, vector<long long>(sz, inf));
  for (int i = 0; i < sz; i++) {
    for (int j = 0; j < sz; j++) {
      for (int ij = 0; ij < sz; ij++) {
        ret[i][j] = min(ret[i][j], a[i][ij] + b[ij][j]);
      }
    }
  }
  return ret;
}
inline vector<vector<long long> > power(vector<vector<long long> > a,
                                        long long n) {
  vector<vector<long long> > ret(sz, vector<long long>(sz, inf));
  for (int i = 0; i < sz; i++) {
    ret[i][i] = 0;
  }
  while (n) {
    if (n & 1) ret = product(ret, a);
    a = product(a, a);
    n >>= 1;
  }
  return ret;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cout << setprecision(32);
  cin >> x >> k >> n >> q;
  compute();
  for (int i = 1; i <= k; i++) {
    cin >> c[i];
  }
  for (int i = 1; i <= q; i++) {
    cin >> p[i] >> w[i];
    mp[p[i]] = w[i];
  }
  for (int i = 1; i <= q; i++) {
    for (int j = 2; j <= q; j++) {
      if (p[j - 1] > p[j]) {
        swap(p[j], p[j - 1]);
        swap(w[j], w[j - 1]);
      }
    }
  }
  sz = possibleStates.size();
  vector<vector<long long> > A = getMatrix();
  vector<long long> dp(sz, inf);
  dp[pos[(1 << x) - 1]] = 0;
  long long cur = 1;
  for (int i = 1; i <= q; i++) {
    long long req = p[i] - k - cur;
    if (req > 0) {
      vector<vector<long long> > B = power(A, req);
      vector<long long> ndp(sz, inf);
      for (int i1 = 0; i1 < sz; i1++) {
        for (int i2 = 0; i2 < sz; i2++) {
          ndp[i2] = min(ndp[i2], dp[i1] + B[i1][i2]);
        }
      }
      dp = ndp;
      cur += req;
    }
    while (cur <= p[i] && cur <= n - x) {
      vector<long long> ndp(sz, inf);
      for (int it = 0; it < sz; it++) {
        int mask = possibleStates[it];
        if (mask & 1) {
          for (int j = 1; j <= k; j++) {
            if (mask & (1 << j)) continue;
            long long cost = c[j];
            if (mp.find(cur + j) != mp.end()) cost += mp[cur + j];
            ndp[pos[(mask ^ (1 << j)) >> 1]] =
                min(ndp[pos[(mask ^ (1 << j)) >> 1]], dp[it] + cost);
          }
        } else {
          ndp[pos[mask >> 1]] = min(ndp[pos[mask >> 1]], dp[it]);
        }
      }
      dp = ndp;
      cur++;
    }
  }
  {
    long long req = n - x + 1 - cur;
    if (req > 0) {
      vector<vector<long long> > B = power(A, req);
      vector<long long> ndp(sz, inf);
      for (int i1 = 0; i1 < sz; i1++) {
        for (int i2 = 0; i2 < sz; i2++) {
          ndp[i2] = min(ndp[i2], dp[i1] + B[i1][i2]);
        }
      }
      dp = ndp;
      cur += req;
    }
  }
  cout << dp[pos[(1 << x) - 1]] << '\n';
  return 0;
}
