#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
int n, m, cl, ce, v, Q, L, R, D, U, p, best;
int l[maxn], e[maxn];
void updateL(int p) {
  if (p < 1 || cl < p) return;
  int need = U - D;
  need += abs(l[p] - L) + abs(l[p] - R);
  best = min(best, need);
}
void updateE(int p) {
  if (p < 1 || ce < p) return;
  int need = (U - D + v - 1) / v;
  need += abs(e[p] - L) + abs(e[p] - R);
  best = min(best, need);
}
int main() {
  scanf("%d%d%d%d%d", &n, &m, &cl, &ce, &v);
  for (int i = (1); i <= int(cl); i++) scanf("%d", &l[i]);
  for (int i = (1); i <= int(ce); i++) scanf("%d", &e[i]);
  scanf("%d", &Q);
  while (Q--) {
    scanf("%d%d%d%d", &D, &L, &U, &R);
    if (D > U) swap(D, U);
    if (L > R) swap(L, R);
    if (D == U)
      printf("%d\n", R - L);
    else {
      best = 2e9;
      p = upper_bound(l + 1, l + cl + 1, L) - l;
      updateL(p - 1);
      updateL(p);
      p = upper_bound(e + 1, e + ce + 1, L) - e;
      updateE(p - 1);
      updateE(p);
      printf("%d\n", best);
    }
  }
  return 0;
}
