#include <cstdint>
#include <vector>
#include <bitset>
#include <iostream>
#include <queue>

using namespace std;

#define forn(i, n) for (int i = 0; i < (int)(n); i++)
#define forbitset(i, b) for (int i = b._Find_first(); i < b.size(); i = b._Find_next(i))

const int maxS = 1e4;

int main() {
	int n, S;
	cin >> n >> S;
	vector<int> a(n), p(S+1);
	bitset<maxS+1> f; // f[x]
	f[0] = 1;
	// O(n*S / wordSize) // w=wordSize
	// wordSize >= logn
	forn(j, n) { // a[0] + a[2] + a[4] = S
		cin >> a[j];
		// // a = 2
		// // f    = 010101010101011100000000000
		// // f>>a = 00010101010101011100000000000
		auto b = (f << a[j]) & ~f;
		// 01010101|01011111|110000001|11111111|
		// >>3
		// 000|01010101|01011111|110000001|11111111|

		forbitset(i, b)
			p[i] = j;
		f |= f << a[j];
	}

	forn(j, n) {
		cin >> a[j];
		for (int i = S - a[j]; i >= 0; i--)
			if (f[i] && !f[i + a[j]]) { // если я умею получать i
				f[i + a[j]] = 1; // то и i+a теперь тоже
				p[i] = j;
			}
	}
}