#include <bits/stdc++.h>
using namespace std;
long long int dx[] = {1, -1, 0, 0};
long long int dy[] = {0, 0, 1, -1};
long long int const MOD = 1000000007;
long long mod_pow(long long x, long long n) {
  return (!n) ? 1 : (mod_pow((x * x) % MOD, n / 2) * ((n & 1) ? x : 1)) % MOD;
}
long long int madd(long long int a, long long int b) { return (a + b) % MOD; }
long long int msub(long long int a, long long int b) {
  return (a - b + MOD) % MOD;
}
long long int mmul(long long int a, long long int b) { return (a * b) % MOD; }
long long int minv(long long int a) { return mod_pow(a, MOD - 2); }
long long int mdiv(long long int a, long long int b) {
  return mmul(a, minv(b));
}
namespace std {
bool operator<(const complex<double>& a, const complex<double>& b) {
  return a.real() != b.real() ? a.real() < b.real() : a.imag() < b.imag();
}
}  // namespace std
long long int n, l, q;
long long int x[100010];
long long int table[100010][20];
signed main() {
  cin >> n;
  for (long long int(i) = (0); (i) < (n); (i)++) cin >> x[i];
  cin >> l >> q;
  for (long long int(i) = (0); (i) < (n); (i)++) {
    table[i][0] = upper_bound(x, x + n, x[i] + l) - x - 1;
  }
  for (long long int(j) = (1); (j) < (20); (j)++)
    for (long long int(i) = (0); (i) < (n); (i)++) {
      table[i][j] = table[table[i][j - 1]][j - 1];
    }
  for (long long int(i) = (0); (i) < (q); (i)++) {
    long long int a, b;
    cin >> a >> b;
    a--;
    b--;
    long long int mi = min(a, b), ma = max(a, b);
    a = mi, b = ma;
    long long int ans = 0, idx = a;
    while (1) {
      long long int temp =
          lower_bound(table[idx], table[idx] + 20, b) - table[idx];
      if (table[idx][temp] > b && idx != 0) idx--;
      idx = table[idx][temp];
      ans += (1 << temp);
      if (idx >= b) break;
    }
    cout << ans << endl;
  }
  return 0;
}
