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

int N,V,M = 19;
int A[200010];
int mem[2][20][2000010];
int dp[2][2000010];
int ans[200010];
int INF = 1001001001;

int unit(int id,int bit)
{
    if(!bit)
    {
        if(id)return 0;
        else return N - 1;
    }
    if(dp[id][bit] != -1)return dp[id][bit];
    int res;
    if(id)res = 0;
    else res = N - 1;
    for(int i = 0; i < M; i++)
    {
        if(bit & (1 << i))
        {
            if(id)res = max(res,mem[id][i][unit(id,bit - (1 << i))] + 1);
            else res = min(res,mem[id][i][unit(id,bit - (1 << i))] - 1);
        }
    }
    return dp[id][bit] = res;
}

int main()
{
    scanf("%d%d",&N,&V);
    for(int i = 0; i < N; i++)scanf("%d",A + i);

    int v = V;
    int cnt = 0;
    while(V)V /= 2,cnt++;

    M = cnt + 1;

    for(int i = 0; i < 20; i++)
    {
        int tmp = 0;
        for(int j = 0; j < N; j++)
        {
            if(j && A[j] - A[j - 1] > v)tmp = j;
            mem[0][i][j] = tmp;
        }
        tmp = N - 1;
        for(int j = N - 1; j >= 0; j--)
        {
            if(j != N - 1 && A[j + 1] - A[j] > v)tmp = j;
            mem[1][i][j] = tmp;
        }
        v /= 2;
    }

    memset(dp,-1,sizeof(dp));

    for(int i = 0; i < (1 << M - 1); i++)
    {
        int l = unit(1,((1 << M - 1) - 1 << 1) - (i << 1));
        int r = unit(0,(i << 1));
        if(l > r)
        {
            for(int j = 0; j < N; j++)printf("Possible\n");
            return 0;
        }
        if(mem[1][0][l] >= r)
        {
            ans[l]++;
            ans[r + 1]--;
        }
    }
    for(int i = 1; i < N; i++)ans[i] += ans[i - 1];

    for(int i = 0; i < N; i++)
    {
        if(ans[i])printf("Possible\n");
        else printf("Impossible\n");
    }

    return 0;
}
