//const int K = 17;
//void __(){
//    _(int,n);
//    _(vi,a,n);
//    _(int,L);
//    _(int,q);
//    _(vpii,queries,q);
//    vvi nxt_l(n,vi(K)),nxt_r(n,vi(K));
//    int r = n-1, l = 0;
//    per(i,n){
//        while(a[r]-a[i] > L)
//            --r;
//        nxt_r[i][0] = r;
//        rep(j,1,K-1)
//            nxt_r[i][j] = nxt_r[nxt_r[i][j-1]][j-1];
//    }
//    rep(i,n){
//        while(a[i]-a[l] > L)
//            ++l;
//        nxt_l[i][0] = l;
//        rep(j,1,K-1)
//            nxt_l[i][j] = nxt_l[nxt_l[i][j-1]][j-1];
//    }
//    for(auto _ : queries){
//        int a,b;
//        tie(a,b) = _;
//        --a, --b;
//        int ans = 0;
//        if(a > b)
//            swap(a,b);
//        if(a < b){
//            per(i,K)
//                if(nxt_r[a][i] < b){
//                    a = nxt_r[a][i];
//                    ans += 1<<i;
//                }
//            if(a < b){
//                ++ans;
//                assert(nxt_r[a][0] >= b);
//            }
//        }
//        else{
//            per(i,K)
//                if(nxt_l[a][i] > b){
//                    a = nxt_l[a][i];
//                    ans += 1<<i;
//                }
//            if(a > b){
//                ++ans;
//                assert(nxt_l[a][0] <= b);
//            }
//        }
//        print ans;
//    }
//}
//
#include <iomanip>
#include <cassert>
#include <vector>
#include <utility>
#include <iostream>
#include <string>
#define REP_INT(i,l,r) for(int i = l; i <= r; ++i)
#define REP_ZERO_INT(i,r) for(int i = 0; i < r; ++i)
#define GET_REP_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define rep(...) GET_REP_MACRO(__VA_ARGS__,REP_ANY,REP_INT,REP_ZERO_INT)(__VA_ARGS__)
#define PER_ZERO_INT(i,r) for(int i = r-1; i >= 0; --i)
#define GET_PER_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define per(...) GET_PER_MACRO(__VA_ARGS__,PER_ANY,PER_INT,PER_ZERO_INT)(__VA_ARGS__)
#define all(v) (v).begin(), (v).end()
#define sz(v) ll(v.size())
#define T1 template<typename T> static
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;
T1 ostream& operator<<(ostream& stream, const vector<T>& t);
template <typename F, typename S> static
istream& operator>>(istream& stream, pair<F, S>& t){
    return stream >> t.first >> t.second;
}
T1 istream& read(T, T, istream& = cin);
T1 istream& operator>>(istream& stream, vector<T>& t){
    return read(all(t), stream);
}
T1 istream& read(T b, T e, istream& stream){
    for(T it = b; it != e; ++it)
        stream >> *it;
    return stream;
}
struct _print {
    string sep,end;
    bool space;
    ostream &stream;
    _print(string _sep=" ",string _end="\n",
            ostream &_stream = cout)
        : sep(_sep),end(_end),space(false),
            stream(_stream) {}
    ~_print() { stream << end; }
    template <typename T>
        _print &operator , (const T &t) {
            if (space) stream << sep;
            space = true;
            stream << t;
            return *this;
        }
};
#define print _print(),
#define INPUT_WITHOUT_INIT(type,name) type name; cin >> name
#define _IWI(type,name,...) type name(__VA_ARGS__); cin >> name
#define GET_INPUT_MACRO(_1,_2,_3,_4,_5,_6,_7,_8,NAME,...) NAME
#define _(...) GET_INPUT_MACRO(__VA_ARGS__,_IWI,_IWI,_IWI,_IWI,_IWI,_IWI,INPUT_WITHOUT_INIT)(__VA_ARGS__)
const int K = 17;
void __(){
    _(int,n);
    _(vi,a,n);
    _(int,L);
    _(int,q);
    _(vpii,queries,q);
    vvi nxt_l(n,vi(K)),nxt_r(n,vi(K));
    int r = n-1, l = 0;
    per(i,n){
        while(a[r]-a[i] > L)
            --r;
        nxt_r[i][0] = r;
        rep(j,1,K-1)
            nxt_r[i][j] = nxt_r[nxt_r[i][j-1]][j-1];
    }
    rep(i,n){
        while(a[i]-a[l] > L)
            ++l;
        nxt_l[i][0] = l;
        rep(j,1,K-1)
            nxt_l[i][j] = nxt_l[nxt_l[i][j-1]][j-1];
    }
    for(auto _ : queries){
        int a,b;
        tie(a,b) = _;
        --a, --b;
        int ans = 0;
        if(a > b)
            swap(a,b);
        if(a < b){
            per(i,K)
                if(nxt_r[a][i] < b){
                    a = nxt_r[a][i];
                    ans += 1<<i;
                }
            if(a < b){
                ++ans;
                assert(nxt_r[a][0] >= b);
            }
        }
        else{
            per(i,K)
                if(nxt_l[a][i] > b){
                    a = nxt_l[a][i];
                    ans += 1<<i;
                }
            if(a > b){
                ++ans;
                assert(nxt_l[a][0] <= b);
            }
        }
        print ans;
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(15);
        __();
}


Measured memory_bytes: 22400