import sys from collections import deque def readints(): return list(map(int, sys.stdin.readline().split())) def main(): N, M = readints() A = readints() K = readints() # Compute S_max S_max = sum(a * k for a, k in zip(A, K)) if S_max < M: print(-1) return x = S_max - M # Check if x can be formed using the coins # Using BFS to find the minimal number of coins mod = A[0] max_mod = max(A) visited = {} queue = deque() queue.append((0, 0)) visited[0] = 0 found = False min_coins = None while queue: current, coins = queue.popleft() if current == x: min_coins = coins found = True break for a in A: next_val = current + a next_coins = coins + 1 if next_val > x + max(A): continue if next_val not in visited or next_coins < visited[next_val]: visited[next_val] = next_coins queue.append((next_val, next_coins)) if not found: print(-1) return print(min_coins) if __name__ == "__main__": main()