/* Headers */
#include <unordered_map>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <climits>
#include <cstdio>
#include <cctype>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#define FOR(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
#define ROF(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
#define FORL(i,a,b,c) for(long long i=(a);i<=(b);i+=(c))
#define ROFL(i,a,b,c) for(long long i=(a);i>=(b);i-=(c))
#define FORR(i,a,b,c) for(register int i=(a);i<=(b);i+=(c))
#define ROFR(i,a,b,c) for(register int i=(a);i>=(b);i-=(c))
#define RevEdge(x) x^1
#define lowbit(x) x&(-x)
#define LeftChild(x) x<<1
#define RightChild(x) (x<<1)+1
#define CLOSE_IN() fclose(stdin);
#define CLOSE_OUT() fclose(stdout);
#define FILE_IN(x) freopen(x,"r",stdin);
#define FILE_OUT(x) freopen(x,"w",stdout);
#define IOS(x) std::ios::sync_with_stdio(x)
#define Dividing() printf("-----------------------------------\n");
namespace FastIO {
#define gc() (iS == iT ? (iT = (iS = ibuff) + fread(ibuff, 1, SIZ, stdin), (iS == iT ? EOF : *iS++)) : *iS++)
    const int SIZ = 1 << 21 | 1;
    char* iS, * iT, ibuff[SIZ], obuff[SIZ], * oS = obuff, * oT = oS + SIZ - 1, fu[110], cc;
    int fr;
    inline void out() {
        fwrite(obuff, 1, oS - obuff, stdout);
        oS = obuff;
    }
    template<class Type>
    inline void read(Type& x) {
        x = 0;
        Type y = 1;
        for (cc = gc(); (cc > '9' || cc < '0') && cc != '-'; cc = gc());
        cc == '-' ? y = -1 : x = (cc & 15);
        for (cc = gc(); cc >= '0' && cc <= '9'; cc = gc())
            x = x * 10 + (cc & 15);
        x *= y;
    }
    template<class Type>
    inline void print(Type x, char text = '\n') {
        if (x < 0)
            * oS++ = '-', x *= -1;
        if (x == 0)
            * oS++ = '0';
        while (x)
            fu[++fr] = x % 10 + '0', x /= 10;
        while (fr);
            * oS++ = fu[fr--];
        * oS++ = text;
        out();
    }
    inline void prints(char x[], char text = '\n') {
        for (register int i = 0; x[i]; ++i)
            * oS++ = x[i];
        * oS++ = text;
        out();
    }
}
using namespace FastIO;
template<typename T>
inline T max(T a, T b) {return (a > b) ? a : b;}
template<typename T>
inline T min(T a, T b) {return (a > b) ? b : a;}
/* definitions */
#define pii std::pair<int, int>
#define mp std::make_pair
#define fi first
#define se second
const int inf = 0x3f3f3f3f, MAXN = 2e5 + 10;
int n, v, dep, pos[MAXN], L[20][MAXN], R[20][MAXN], maxl[MAXN << 4], maxr[MAXN << 4];
bool ans[MAXN];
pii seg[MAXN];
/* functions */
int main(int argc, char *argv[]) {
    /*FILE_IN("data.in");*/ read(n); read(v);
    FOR(i, 1, n, 1) read(pos[i]);
    pos[0] = -inf - v - 1; pos[n + 1] = inf + v + 1;
    for(int k = v; k >= 0; k >>= 1, dep++) {
        R[dep][n + 1] = n + 1;
        FOR(i, 1, n, 1) L[dep][i] = (pos[i] - pos[i - 1] <= k) ? L[dep][i - 1] : i;
        ROF(i, n, 1, 1) R[dep][i] = (pos[i + 1] - pos[i] <= k) ? R[dep][i + 1] : i;
        if(k == 0) {dep++; break;}
    }
    FOR(i, 1, n, 1) seg[i] = mp(L[0][i], R[0][i]);
    int cnt = std::unique(seg + 1, seg + n + 1) - (seg + 1);
    FOR(i, 0, (1 << dep) - 1, 1) maxr[i] = n + 1;
    FOR(s, 0, (1 << dep) - 1, 2)
        FOR(i, 0, dep - 1, 1) {
            if(!(s & (1 << i))) continue;
            maxl[s] = max(maxl[s], R[i][maxl[s ^ (1 << i)] + 1]);
            maxr[s] = min(maxr[s], L[i][maxr[s ^ (1 << i)] - 1]);
        }
    if(cnt > dep) {FOR(i, 1, n, 1) puts("Impossible"); return 0;}
    FOR(i, 1, cnt, 1)
        FOR(s, 0, (1 << dep) - 1, 2)
            if(maxl[s] >= seg[i].fi - 1 && maxr[(1 << dep) - 2 - s] <= seg[i].se + 1) {
                FOR(j, seg[i].fi, seg[i].se, 1) ans[j] = 1; break;
            }
    FOR(i, 1, n, 1) puts(ans[i] ? "Possible" : "Impossible");
    return 0;
}


Measured memory_bytes: 41704