#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
template <class T>
void ckmin(T& a, T b) {
  a = min(a, b);
}
template <class T>
void ckmax(T& a, T b) {
  a = max(a, b);
}
template <class T, int... Ns>
struct BIT {
  T val = 0;
  void upd(T v) { val += v; }
  T query() { return val; }
};
template <class T, int N, int... Ns>
struct BIT<T, N, Ns...> {
  BIT<T, Ns...> bit[N + 1];
  template <typename... Args>
  void upd(int pos, Args... args) {
    for (; pos <= N; pos += (pos & -pos)) bit[pos].upd(args...);
  }
  template <typename... Args>
  T sum(int r, Args... args) {
    T res = 0;
    for (; r; r -= (r & -r)) res += bit[r].query(args...);
    return res;
  }
  template <typename... Args>
  T query(int l, int r, Args... args) {
    return sum(r, args...) - sum(l - 1, args...);
  }
};
namespace input {
template <class T>
void re(complex<T>& x);
template <class T1, class T2>
void re(pair<T1, T2>& p);
template <class T>
void re(vector<T>& a);
template <class T, size_t SZ>
void re(array<T, SZ>& a);
template <class T>
void re(T& x) {
  cin >> x;
}
void re(double& x) {
  string t;
  re(t);
  x = stod(t);
}
void re(long double& x) {
  string t;
  re(t);
  x = stold(t);
}
template <class T, class... Ts>
void re(T& t, Ts&... ts) {
  re(t);
  re(ts...);
}
template <class T>
void re(complex<T>& x) {
  T a, b;
  re(a, b);
  x = complex<long double>(a, b);
}
template <class T1, class T2>
void re(pair<T1, T2>& p) {
  re(p.first, p.second);
}
template <class T>
void re(vector<T>& a) {
  for (int i = 0; i < ((int)a.size()); i++) re(a[i]);
}
template <class T, size_t SZ>
void re(array<T, SZ>& a) {
  for (int i = 0; i < (SZ); i++) re(a[i]);
}
}  // namespace input
using namespace input;
namespace output {
void pr(int x) { cout << x; }
void pr(long x) { cout << x; }
void pr(long long x) { cout << x; }
void pr(unsigned x) { cout << x; }
void pr(unsigned long x) { cout << x; }
void pr(unsigned long long x) { cout << x; }
void pr(float x) { cout << x; }
void pr(double x) { cout << x; }
void pr(long double x) { cout << x; }
void pr(char x) { cout << x; }
void pr(const char* x) { cout << x; }
void pr(const string& x) { cout << x; }
void pr(bool x) { pr(x ? "true" : "false"); }
template <class T1, class T2>
void pr(const pair<T1, T2>& x);
template <class T>
void pr(const T& x);
template <class T, class... Ts>
void pr(const T& t, const Ts&... ts) {
  pr(t);
  pr(ts...);
}
template <class T1, class T2>
void pr(const pair<T1, T2>& x) {
  pr("{", x.first, ", ", x.second, "}");
}
template <class T>
void pr(const T& x) {
  pr("{");
  bool fst = 1;
  for (const auto& a : x) pr(!fst ? ", " : "", a), fst = 0;
  pr("}");
}
void ps() { pr("\n"); }
template <class T, class... Ts>
void ps(const T& t, const Ts&... ts) {
  pr(t);
  if (sizeof...(ts)) pr(" ");
  ps(ts...);
}
void pc() { pr("]\n"); }
template <class T, class... Ts>
void pc(const T& t, const Ts&... ts) {
  pr(t);
  if (sizeof...(ts)) pr(", ");
  pc(ts...);
}
}  // namespace output
using namespace output;
namespace io {
void setIn(string second) { freopen(second.c_str(), "r", stdin); }
void setOut(string second) { freopen(second.c_str(), "w", stdout); }
void setIO(string second = "") {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  if ((int)second.size()) {
    setIn(second + ".in"), setOut(second + ".out");
  }
}
}  // namespace io
using namespace io;
const int MOD = 1000000007;
const long long INF = 1e18;
const int MX = 100005;
const long double PI = 4 * atan((long double)1);
vector<int> hotels;
int r[MX][20];
int main() {
  setIO("test");
  int N;
  re(N);
  for (int i = 0; i < (N); i++) {
    int x;
    re(x);
    x--;
    hotels.push_back(x);
  }
  int L, Q;
  re(L, Q);
  for (int i = 0; i < (N); i++) {
    for (int j = 0; j < (19); j++) {
      r[i][j] = -1;
    }
  }
  for (int i = 0; i < (N); i++) {
    int lo = 0;
    int hi = N - 1;
    int ind = 0;
    while (lo <= hi) {
      int m = lo + (hi - lo) / 2;
      if (hotels[m] <= hotels[i] + L) {
        lo = m + 1;
        ind = m;
      } else {
        hi = m - 1;
      }
    }
    r[i][0] = ind;
  }
  for (int j = 0; j < (19); j++) {
    for (int i = 0; i < (N); i++) {
      r[i][j + 1] = r[r[i][j]][j];
    }
  }
  for (int i = 0; i < (Q); i++) {
    int ai, bi;
    re(ai, bi);
    if (ai > bi) {
      swap(ai, bi);
    }
    ai--;
    bi--;
    int lo = 1;
    int hi = N;
    int ans = 0;
    while (lo <= hi) {
      int days = lo + (hi - lo) / 2;
      bool works = false;
      int pos = ai;
      for (int j = (20) - 1; j >= 0; j--) {
        if (days & (1 << j)) {
          if (r[pos][j] == -1) {
            continue;
          }
          pos = r[pos][j];
        }
      }
      if (pos >= bi) {
        hi = days - 1;
        ans = days;
      } else {
        lo = days + 1;
      }
    }
    cout << ans << "\n";
  }
}
