#include <bits/stdc++.h>
using namespace std;
long long a[200005], b[200005];
vector<long long> c, d;
vector<pair<long long, long long> > v;
vector<long long>::iterator up;
bool fn(pair<long long, long long> a1, pair<long long, long long> a2) {
  if (a1.first == a2.first) return a1.second < a2.second;
  return a1.first < a2.first;
}
int main() {
  long long n, x, s, cc;
  int m, k;
  scanf("%I64d %d %d", &n, &m, &k);
  scanf("%I64d %I64d", &x, &s);
  long long ans = n * x;
  for (__typeof(m) i = 0; i < (m); ++i) scanf("%I64d", &a[i]);
  for (__typeof(m) i = 0; i < (m); ++i) {
    scanf("%I64d", &b[i]);
    if (b[i] <= s) {
      ans = min(ans, n * a[i]);
    }
  }
  for (__typeof(k) i = 0; i < (k); ++i) {
    scanf("%I64d", &cc);
    c.push_back(cc);
  }
  for (__typeof(k) i = 0; i < (k); ++i) {
    scanf("%I64d", &cc);
    d.push_back(cc);
    if (cc <= s) {
      if (c[i] >= n)
        ans = 0;
      else if (c[i] < n)
        ans = min(ans, (n - c[i]) * x);
    }
  }
  for (__typeof(m) i = 0; i < (m); ++i) v.push_back(make_pair(a[i], b[i]));
  for (__typeof(m) i = 0; i < (m); ++i) {
    long long r = s - v[i].second;
    if (r > 0) {
      ans = min(ans, n * v[i].first);
      int inx = upper_bound(d.begin(), d.end(), r) - d.begin();
      if (inx >= k && d[k - 1] <= r && c[k - 1] < n) {
        ans = min(ans, (n - c[k - 1]) * v[i].first);
      } else if (inx >= 0 && inx < k) {
        if (d[inx] <= r && c[inx] < n) {
          ans = min(ans, (n - c[inx]) * v[i].first);
        } else if (inx > 0 && d[inx - 1] <= r && c[inx - 1] < n) {
          ans = min(ans, (n - c[inx - 1]) * v[i].first);
        }
      }
    }
  }
  printf("%I64d\n", ans);
  return 0;
}
