#include<bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,int> pli;
const int inf=1e9;
const ll Inf=1e18;
const int N=1e6+10;
const int mod=0;
int gi() {
    int x=0,o=1;char ch=getchar();
    while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    if(ch=='-') o=-1,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*o;
}
template<typename T> bool chkmax(T &a,T b) { return a<b?a=b,1:0; };
template<typename T> bool chkmin(T &a,T b) { return a>b?a=b,1:0; };
int add(int a,int b) { return a+b>=mod?a+b-mod:a+b; }
int sub(int a,int b) { return a-b<0?a-b+mod:a-b; }
void inc(int &a,int b) { a=(a+b>=mod?a+b-mod:a+b); }
void dec(int &a,int b) { a=(a-b<0?a-b+mod:a-b); }
int n,v,x[N],st[N],l[N][20],r[N][20],f[N],g[N],mn[N],top=0;
int main() {
    cin>>n>>v;
    for(int i=1;i<=n;i++) x[i]=gi();
    while(v) st[++top]=v,v>>=1;
    st[++top]=0;
    reverse(st+1,st+top+1);
    for(int j=1;j<=top;j++) {
        l[1][j]=1;
        for(int i=2;i<=n;i++) l[i][j]=(x[i]-x[i-1]<=st[j])?l[i-1][j]:i;
        r[n][j]=n;
        for(int i=n-1;i;i--) r[i][j]=(x[i+1]-x[i]<=st[j])?r[i+1][j]:i;
    }
    f[0]=0;g[0]=n+1;
    for(int i=1;i<(1<<top);i++) {
        f[i]=0,g[i]=n+1;
        for(int j=1;j<=top;j++)
            if(i>>(j-1)&1) {
                chkmax(f[i],(f[i^(1<<(j-1))]==n)?n:r[f[i^(1<<(j-1))]+1][j]);
                chkmin(g[i],(g[i^(1<<(j-1))]==1)?1:l[g[i^(1<<(j-1))]-1][j]);
            }
    }
    memset(mn,0x3f,sizeof(mn));
    for(int i=0;i<(1<<(top-1));i++) chkmin(mn[f[i]],g[((1<<(top-1))-1)^i]);
    for(int i=n-1;i;i--) chkmin(mn[i],mn[i+1]);
    for(int i=1;i<=n;i++) puts(mn[l[i][top]-1]<=r[i][top]+1?"Possible":"Impossible");
    return 0;
}
