#include <bits/stdc++.h>
using namespace std;
int main() {
  auto __startTime = chrono::system_clock::now();
  ios_base::sync_with_stdio(false);
  long long N;
  int M, K;
  cin >> N >> M >> K;
  long long X, S;
  cin >> X >> S;
  vector<pair<long long, long long>> firstSpells(M + 1);
  firstSpells[0] = {0, X};
  for (int i = 1; i <= M; i++) {
    cin >> firstSpells[i].second;
  }
  for (int i = 1; i <= M; i++) {
    cin >> firstSpells[i].first;
  }
  sort(firstSpells.begin(), firstSpells.end());
  vector<long long> potionsCreated(K + 1);
  vector<long long> manaCost(K + 1);
  potionsCreated[0] = 0;
  manaCost[0] = 0;
  for (int i = 1; i <= K; i++) cin >> potionsCreated[i];
  for (int i = 1; i <= K; i++) cin >> manaCost[i];
  assert(is_sorted(potionsCreated.begin(), potionsCreated.end()));
  assert(is_sorted(manaCost.begin(), manaCost.end()));
  auto best = numeric_limits<long long>::max();
  assert(firstSpells.size() == M + 1);
  assert(potionsCreated.size() == K + 1);
  for (auto spell : firstSpells) {
    int l = 1, r = K + 1;
    int found = -1;
    while (l <= r) {
      int m = (l + r) / 2;
      if (spell.first + manaCost[m - 1] <= S) {
        found = m - 1;
        l = m + 1;
      } else
        r = m - 1;
    }
    if (found != -1) {
      auto _time = 1LL * (N - potionsCreated[found]) * spell.second;
      best = min(best, _time);
    }
  }
  cout << best << endl;
  auto __endTime = chrono::system_clock::now();
  chrono::duration<double> __diff = __endTime - __startTime;
  cerr << fixed << setprecision(10);
  cerr << "Time: " << __diff.count() << endl;
  return 0;
}
