#include <bits/stdc++.h>
using namespace std;
const long long int INF = 1e18;
const int mod = 1000000007;
typedef struct potion {
  long long int t, c;
} potions;
long long int bsearch(potions *arr, long long int val, long long int low,
                      long long int high) {
  while (low < high) {
    long long int mid = (high + low) / 2;
    if (arr[mid].c < val)
      low = mid + 1;
    else
      high = mid;
  }
  return low;
}
int main() {
  long long int t, n, m, i, j, k, l = 0, x, y, z, s;
  scanf("%lld %lld %lld", &n, &m, &k);
  scanf("%lld %lld", &x, &s);
  potions arr[m], inst[k];
  long long int ans = n * x;
  for (i = 0; i < m; ++i) scanf("%lld", &arr[i].t);
  for (i = 0; i < m; ++i) scanf("%lld", &arr[i].c);
  for (i = 0; i < k; ++i) scanf("%lld", &inst[i].t);
  for (i = 0; i < k; ++i) {
    scanf("%lld", &inst[i].c);
    if (inst[i].c <= s && inst[i].t >= n) ans = 0;
  }
  sort(arr, arr + m, [](potions x, potions y) {
    if (x.c == y.c) return x.t < y.t;
    return x.c < y.c;
  });
  i = 0;
  while (arr[i].c <= s && i < m) {
    y = s - arr[i].c;
    ans = min(ans, arr[i].t * n);
    z = bsearch(inst, y, 0, k);
    while ((inst[z].c > y && z >= 0) || z >= k) z--;
    if (z >= 0 && inst[z].c <= y) ans = min(ans, (n - inst[z].t) * arr[i].t);
    i++;
  }
  i = 0;
  while (inst[i].c <= s && i < k) {
    y = s - inst[i].c;
    ans = min(ans, (n - inst[i].t) * x);
    z = bsearch(arr, y, 0, m);
    while ((arr[z].c > y && z >= 0) || z >= m) z--;
    if (z >= 0 && arr[z].c <= y) ans = min(ans, (n - inst[i].t) * arr[z].t);
    i++;
  }
  printf("%lld\n", ans);
  return 0;
}
