#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<bitset>
using namespace std;
typedef long long LL;
const int N=1<<18;
int gi() {
	int w=0;bool q=1;char c=getchar();
	while ((c<'0'||c>'9') && c!='-') c=getchar();
	if (c=='-') q=0,c=getchar();
	while (c>='0'&&c <= '9') w=w*10+c-'0',c=getchar();
	return q? w:-w;
}
int L[N],R[N],x[N];
int p[18][N],q[N];
int ans[N];
inline void umin(int &x,int y) { y<x?x=y:0; }
inline void umax(int &x,int y) { x<y?x=y:0; }
int main()
{
	int n=gi()-1,v=gi(),i,j,k=v,m=0,u[20]={},s;
	while (k) u[m++]=k>>=1;

	for (i=0;i<=n;i++) x[i]=gi();
	for (i=n;i;i--) x[i]-=x[i-1];

	for (i=0;i<m;i++) {
		p[i][n+1]=n+1;
		for (j=n;j;j--)
			p[i][j]=x[j]<=u[i]?p[i][j+1]:j;
	}
	for (s=0;s<1<<m;s++)
		for (i=0;i<m;i++)
			if (!(s>>i&1))
				umax(L[s|1<<i],p[i][L[s]+1]);

	for (i=0;i<m;i++)
		for (j=1;j<=n;j++)
			p[i][j]=x[j]<=u[i]?p[i][j-1]:j;
	for (s=0;s<1<<m;s++) R[s]=n+1;
	for (s=0;s<1<<m;s++)
		for (i=0;i<m;i++)
			if (!(s>>i&1))
				umin(R[s|1<<i],R[s|1<<i]?p[i][R[s]-1]:0);

	memset(ans,0x3f,sizeof(ans));
	for (s=0;s<1<<m;s++)
		umin(ans[L[s]],R[((1<<m)-1)^s]);
	for (i=1;i<=n;i++) umin(ans[i-1],ans[i]);

	for (i=n,q[n+1]=n+1;i;i--)
		q[i]=x[i]>v?i:q[i+1];
	for (i=0;i<=n;i++) {
		if (!i||x[i]>v) k=i;
		puts(ans[k]<=q[i+1]?"Possible":"Impossible");
	}
	return 0;
}
