#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int x;
  cin >> x;
  return x;
}
template <typename T>
istream &operator>>(istream &in, vector<T> &vec) {
  for (int i = 0; i < vec.size(); ++i) in >> vec[i];
  return in;
}
template <typename T>
ostream &operator<<(ostream &out, const vector<T> &vec) {
  for (int i = 0; i < vec.size(); ++i) out << vec[i] << " ";
  return out;
}
vector<vector<int>> f;
vector<bool> check;
int x1[] = {0, 1, 0, -1};
int y12[] = {1, 0, -1, 0};
vector<pair<long long, long long>> gh;
int main() {
  long long a, b, c;
  cin >> a >> b >> c;
  vector<pair<int, int>> f1(b);
  vector<int> ff1(c), ff2(c);
  int t = in(), pr = in();
  long long min1 = a * t;
  for (int i = 0; i < b; ++i) scanf("%d", &f1[i].first);
  for (int i = 0; i < b; ++i) scanf("%d", &f1[i].second);
  for (int i = 0; i < c; ++i) scanf("%d", &ff1[i]);
  for (int i = 0; i < c; ++i) scanf("%d", &ff2[i]);
  for (int i = 0; i < b; ++i) {
    if (pr - f1[i].second >= 0) {
      int g = upper_bound((ff2).begin(), (ff2).end(), pr - f1[i].second) -
              ff2.begin() - 1;
      if (g != -1) min1 = min(min1, (a - ff1[g]) * f1[i].first);
      min1 = min(min1, a * f1[i].first);
    }
  }
  for (int i = 0; i < c; ++i)
    if (pr - ff2[i] >= 0) min1 = min(min1, (a - ff1[i]) * t);
  cout << (min1 > 0 ? min1 : 0) << endl;
  return 0;
}
