Вы приходите на работу. Включаете компьютер. Начинаете программировать. И даже не задумываетесь о том, насколько важную роль играет оперативная память. В этой задаче Вам предстоит решить одну из задач, которая возникает при повседневной работе с компьютером.
Будем считать, что оперативная память представляет из себя последовательность ячеек, в которые могут быть записаны данные. Некоторые ячейки уже заняты какими-то данными, некоторые являются свободными. Свободные ячейки образуют так называемые участки памяти. Таким образом, участок памяти — это последовательность из нескольких подряд идущих свободных ячеек памяти.
Вам даны ровно n участков памяти, i-ый участок состоит из ai ячеек. Вы должны в своей программе выделить память под m массивов, j-ый массив занимает 2bj последовательных ячеек памяти. Возможно, на все m массивов памяти не хватит, поэтому требуется определить, какое максимальное количество массивов можно разместить в доступных участках памяти. Разумеется, массивы нельзя делить между участками памяти, а также никакая ячейка памяти не должна принадлежать двум массивам.
В первой строке входных данных записано два целых числа n и m (1 ≤ n, m ≤ 106). В следующей строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109). В следующей строке записаны m целых чисел b1, b2, ..., bm (1 ≤ 2bi ≤ 109).
Выведите единственное целое число — ответ на задачу.
5 3
8 4 3 2 2
3 2 2
2
10 6
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0
6
В первом примере даны участки памяти размерами 8, 4, 3, 2 и 2 и массивы размерами 8, 4, 4. Существует несколько способов получить ответ 2: можно разместить массив размера 8 на участке памяти размера 8, а один из массивов размера 4 на участке памяти размера 4, другой вариант — разместить два массива размера 4 на одном участке памяти размера 8.
Во втором примере у нас дано 10 участков памяти размера 1 и 6 массивов размера 1. Мы можем выбрать любые 6 участков памяти и разместить в них все имеющиеся массивы.
Название |
---|