#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
inline int in() {
  int x;
  scanf("%d", &x);
  return x;
}
inline long long lin() {
  long long x;
  scanf("%I64d", &x);
  return x;
}
long long n, m, k;
long long x, s;
long long MN[N];
struct Info {
  long long tt, mny;
} FF[N], SS[N];
bool nishat(Info A, Info B) {
  if (A.mny == B.mny) {
    return A.tt < B.tt;
  }
  return A.mny < B.mny;
}
int Binary(int lo, int hi, long long rem) {
  int mid, ans = -1;
  if (rem >= FF[m].mny) return m;
  if (rem < FF[1].mny) return -1;
  while (hi - lo > 5) {
    mid = (lo + hi) / 2;
    if (FF[mid].mny > rem) {
      hi = mid - 1;
    } else {
      lo = mid;
    }
  }
  for (int i = hi + 10; i >= lo - 10; i--) {
    if (i > m || i < 1) continue;
    if (FF[i].mny <= rem) {
      ans = i;
      break;
    }
  }
  return ans;
}
int main() {
  n = lin();
  m = lin();
  k = lin();
  x = lin();
  s = lin();
  for (int i = 1; i <= m; i++) {
    FF[i].tt = lin();
  }
  for (int i = 1; i <= m; i++) {
    FF[i].mny = lin();
  }
  sort(FF + 1, FF + m + 1, nishat);
  MN[1] = FF[1].tt;
  for (int i = 2; i <= m; i++) {
    MN[i] = min(MN[i - 1], FF[i].tt);
  }
  for (int i = 1; i <= k; i++) {
    SS[i].tt = lin();
    SS[i].tt = n - SS[i].tt;
  }
  for (int i = 1; i <= k; i++) {
    SS[i].mny = lin();
  }
  long long ans = n * x;
  for (int i = 1; i <= k; i++) {
    if (SS[i].mny <= s) {
      long long tmp = SS[i].tt * x;
      if (tmp < ans) {
        ans = tmp;
      }
      if (SS[i].tt == 0) {
        ans = 0;
      }
    }
  }
  for (int i = 1; i <= m; i++) {
    if (FF[i].mny <= s) {
      long long tmp = FF[i].tt * n;
      if (tmp < ans) {
        ans = tmp;
      }
    }
  }
  for (int i = 1; i <= k; i++) {
    if (SS[i].mny <= s) {
      long long rem = s - SS[i].mny;
      int idx = Binary(1, m, rem);
      if (idx != -1) {
        long long mn = MN[idx];
        if (mn * SS[i].tt < ans) {
          ans = mn * SS[i].tt;
        }
      }
    }
  }
  printf("%I64d\n", ans);
}
