#include <bits/stdc++.h>
using namespace std;
int mfind(const vector<pair<int, int>>& A, int t) {
  pair<int, int> target = {t, -1};
  if (A.begin()->first > t) return 2000000000;
  auto it = lower_bound((A).begin(), (A).end(), target);
  if (it == A.end() || it->first > t) it--;
  return it->second;
}
int main(int argc, const char* argv[]) {
  int N, M, K;
  scanf("%d%d%d", &N, &M, &K);
  int _X, S;
  scanf("%d%d", &_X, &S);
  long long X = _X;
  vector<pair<int, int>> A(M);
  for (auto&& a : A) scanf("%d", &a.second);
  for (auto&& a : A) scanf("%d", &a.first);
  vector<pair<int, int>> B(K);
  for (auto&& a : B) scanf("%d", &a.second);
  for (auto&& a : B) scanf("%d", &a.first);
  sort((A).begin(), (A).end());
  int mn = X;
  for (auto&& a : A) mn = a.second = min(mn, a.second);
  long long best = min(N * X, N * (long long)mfind(A, S));
  for (auto&& a : B)
    if (a.first <= S) {
      if (a.second < N) {
        best = min(best,
                   (N - a.second) * min(X, (long long)mfind(A, S - a.first)));
      } else {
        best = 0;
        break;
      }
    }
  cout << best << endl;
  return 0;
}
