#include <bits/stdc++.h>
using namespace std;
signed main() {
  int n, m;
  int nles, nlif;
  cin >> n >> m >> nles >> nlif;
  int v;
  cin >> v;
  vector<int> les(nles);
  vector<int> lif(nlif);
  for (int i = 0; i < nles; ++i) {
    scanf("%d", &les[i]);
  }
  for (int i = 0; i < nlif; ++i) {
    scanf("%d", &lif[i]);
  }
  int q;
  cin >> q;
  while (q--) {
    int x, y, xx, yy;
    scanf("%d %d %d %d", &x, &y, &xx, &yy);
    if (x == xx) {
      printf("%d\n", abs(y - yy));
      continue;
    }
    int ans = 2e9;
    {
      auto itr = lower_bound(les.begin(), les.end(), y);
      if (itr != les.begin() && les.size()) {
        auto itl = itr;
        --itl;
        int curans = 0;
        curans += abs(y - *itl);
        curans += abs(x - xx);
        curans += abs(*itl - yy);
        ans = min(ans, curans);
      }
      if (itr != les.end() && les.size()) {
        int curans = 0;
        curans += abs(y - *itr);
        curans += abs(x - xx);
        curans += abs(*itr - yy);
        ans = min(ans, curans);
      }
    }
    {
      auto itr = lower_bound(lif.begin(), lif.end(), y);
      if (itr != lif.begin() && lif.size()) {
        auto itl = itr;
        --itl;
        int curans = 0;
        curans += abs(y - *itl);
        curans += (abs(x - xx) + v - 1) / v;
        curans += abs(*itl - yy);
        ans = min(ans, curans);
      }
      if (itr != lif.end() && lif.size()) {
        int curans = 0;
        curans += abs(y - *itr);
        curans += (abs(x - xx) + v - 1) / v;
        curans += abs(*itr - yy);
        ans = min(ans, curans);
      }
    }
    printf("%d\n", ans);
  }
}
