#include <bits/stdc++.h>
using namespace std;
clock_t __stt;
inline void TStart() { __stt = clock(); }
inline void TReport() {
  printf("\nTaken Time : %.3lf sec\n",
         (double)(clock() - __stt) / CLOCKS_PER_SEC);
}
template <typename T>
T MIN(T a, T b) {
  return a < b ? a : b;
}
template <typename T>
T MAX(T a, T b) {
  return a > b ? a : b;
}
template <typename T>
T ABS(T a) {
  return a > 0 ? a : (-a);
}
template <typename T>
void UMIN(T &a, T b) {
  if (b < a) a = b;
}
template <typename T>
void UMAX(T &a, T b) {
  if (b > a) a = b;
}
int n, x[100005], nx[20][100005], L, q, ls[100005], gs[100005];
int main() {
  int i, j, k;
  scanf("%d", &n);
  for (i = 0; i < n; ++i) scanf("%d", x + i);
  scanf("%d%d", &L, &q);
  for (i = 0; i < n; ++i) {
    int dis = 0;
    for (j = 20; j >= 0; --j) {
      if (i + dis + (1 << j) < n) {
        if (x[i + dis + (1 << j)] <= x[i] + L) {
          dis += (1 << j);
        }
      }
    }
    nx[0][i] = i + dis;
  }
  for (i = 1; i < 20; ++i) {
    for (j = 0; j < n; ++j) {
      nx[i][j] = nx[i - 1][nx[i - 1][j]];
    }
  }
  int ds = 0;
  for (i = n - 2; i >= 0; --i) {
    ds += x[i + 1] - x[i];
    ls[i] = ls[i + 1];
    while (ds >= L) {
      ds -= L;
      ++ls[i];
    }
    gs[i] = !!ds;
  }
  while (q--) {
    int a, b, R = 0;
    scanf("%d%d", &a, &b);
    --a;
    --b;
    if (a > b) swap(a, b);
    if (b == n - 1) {
      printf("%d\n", ls[a] + gs[a]);
      continue;
    }
    for (i = 19; i >= 0; --i) {
      if (nx[i][a] <= b) {
        a = nx[i][a];
        R += (1 << i);
      }
    }
    if (a < b) ++R;
    printf("%d\n", R);
  }
  return 0;
}
