#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2000;
const int MAXV = 10000;
int dp[MAXN + 5][MAXV + 5], V[MAXN + 5];
bool pre[MAXN + 5][MAXV + 5], tag[MAXN + 5];
void get_ans(int i, int j) {
if( i == 0 ) return ;
if( pre[i][j] ) {
tag[i] = true;
get_ans(i-1, j-V[i]);
}
else {
get_ans(i-1, j);
}
}
int main() {
int N, M, K; scanf("%d%d", &N, &M);
for(int i=1;i<=N;i++)
scanf("%d", &V[i]);
scanf("%d", &K);
for(int i=1;i<=N;i++) {
int k; scanf("%d", &k);
for(int j=K;j>=V[i];j--) {
if( dp[i-1][j-V[i]] + k > dp[i-1][j] ) {
dp[i][j] = dp[i-1][j-V[i]] + k;
pre[i][j] = true;
}
else {
dp[i][j] = dp[i-1][j];
pre[i][j] = false;
}
}
}
get_ans(N, K);
for(int i=1;i<=N;i++)
puts(tag[i] ? "1" : "0");
// printf("%d\n", dp[N][K]);
}
qwq