#include <cstdio>
#include <algorithm>
#include <cctype>
using namespace std;
inline int read(int f = 1, int x = 0, char ch = ' ')
{
    while(!isdigit(ch = getchar())) if(ch == '-') f = -1;
    while(isdigit(ch)) x = x*10+ch-'0', ch = getchar();
    return f*x;
}
const int N = 262144+5;
int n, m, v, p[N], l[20][N], r[20][N];
int d[N], f[N], g[N];
void func(int v, int *l, int *r)
{
    l[1] = 1, r[n] = n;
    for(int i = 2; i <= n; ++i) l[i] = p[i]-p[i-1] <= v?l[i-1]:i;
    for(int i = n-1; i; --i) r[i] = p[i+1]-p[i] <= v?r[i+1]:i; 
    l[0] = 1, r[n+1] = n; 
}
void pusha(int l, int r) { if(l <= r) ++d[l], --d[r+1]; }
int main()
{
    n = read(), v = read();
    for(int i = 1; i <= n; ++i) p[i] = read();
    for( ; v; ++m, v >>= 1) func(v, l[m], r[m]); func(0, l[m], r[m]);
    g[0] = n+1;
    for(int s = 1; s < 1<<m; ++s)
    {
        g[s] = n;
        for(int i = 0; i < m; ++i)
            if(s>>i&1) f[s] = max(f[s], r[i+1][f[s^(1<<i)]+1]), g[s] = min(g[s], l[i+1][g[s^(1<<i)]-1]);
    }
    for(int s = 0; s < 1<<m; ++s) pusha(l[0][g[s^((1<<m)-1)]-1], r[0][f[s]+1]);
    for(int i = 1; i <= n; ++i) d[i] += d[i-1], puts(d[i]?"Possible":"Impossible");
    return 0;
}