#include<iostream>
#include<cstring>
#include<cstdio>
#define MN 200000
using namespace std;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x*f;
}
int n,V,x[MN+5],s,nxt[20][MN+5],lst[20][MN+5],res[MN+5],f[1<<18],g[1<<18];
inline void R(int&x,int y){y>x?x=y:0;}
inline void L(int&x,int y){y<x?x=y:0;}
void Dp()
{
    memset(f,200,sizeof(f));f[0]=1;
    for(int i=0;i<1<<s;++i)
        for(int j=1;j<=s;++j) if(!(i&(1<<j-1)))
            R(f[i|(1<<j-1)],nxt[j][f[i]]);
    memset(g,63,sizeof(g));g[0]=n;
    for(int i=0;i<1<<s;++i)
        for(int j=1;j<=s;++j) if(!(i&(1<<j-1)))
            L(g[i|(1<<j-1)],lst[j][g[i]]);
}
void Solve(int l,int r)
{
    bool flag=0;
    for(int i=0;i<1<<s;++i)
        if(f[i]>=l&&g[(1<<s)-1-i]<=r) {flag=1;break;}
    if(flag)for(int i=l;i<=r;++i) res[i]=1;
}
int main()
{
    n=read();V=read();
    for(int i=1;i<=n;++i) x[i]=read();
    for(int t=V;;t>>=1,++s)
    {
        nxt[s][n]=nxt[s][n+1]=n+1;
        lst[s][0]=lst[s][1]=0;
        for(int i=2;i<=n;++i) lst[s][i]=x[i]-x[i-1]>t?i-1:lst[s][i-1];
        for(int i=n-1;i;--i)  nxt[s][i]=x[i+1]-x[i]>t?i+1:nxt[s][i+1];
        if(!t) break;
    }
    int tot=0;Dp();
    for(int i=1;i<=n;i=nxt[0][i],++tot);
    if(tot<=s+1) for(int b=1;b<=n;b=nxt[0][b],++tot) Solve(b,nxt[0][b]-1);
    for(int i=1;i<=n;++i) puts(res[i]?"Possible":"Impossible");
    return 0;
}
