#include <bits/stdc++.h>
using namespace std;

const int maxn = 200010;
int n, V, a[maxn], L[maxn][20], R[maxn][20];
int d[20], fl[1 << 18], fr[1 << 18], ans[maxn];

int main() {
    scanf("%d %d", &n, &V);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    int m = (int)log2(V) + 1;
    for (int i = 0; i <= m; i++) {
        d[i] = V >> i;
    }
    for (int i = 0; i <= m; i++) {
        L[0][i] = L[1][i] = 1;
        R[n][i] = R[n + 1][i] = n;
        for (int j = 2; j <= n; j++) {
            L[j][i] = a[j] - a[j - 1] <= d[i] ? L[j - 1][i] : j;
        }
        for (int j = n - 1; j; j--) {
            R[j][i] = a[j + 1] - a[j] <= d[i] ? R[j + 1][i] : j;
        }
    }
    for (int i = 0; i < 1 << m; i++) {
        fr[i] = n + 1;
        for (int j = 0; j < m; j++) if (i >> j & 1) {
            fl[i] = max(fl[i], R[fl[i ^ (1 << j)] + 1][j + 1]);
            fr[i] = min(fr[i], L[fr[i ^ (1 << j)] - 1][j + 1]);
        }
    }
    for (int i = 0; i <= n + 1; i++) {
        ans[i] = n + 2;
    }
    for (int i = 0; i < 1 << m; i++) {
        ans[fl[i]] = min(ans[fl[i]], fr[i ^ ((1 << m) - 1)]);
    }
    for (int i = n; ~i; i--) {
        ans[i] = min(ans[i], ans[i + 1]);
    }
    for (int i = 1; i <= n; i++) {
        if (ans[L[i][0] - 1] <= R[i][0] + 1) printf("Possible\n");
        else printf("Impossible\n");
    }
    return 0;
}