#include <bits/stdc++.h>
using namespace std;
class Cloth{
public:
int claps;
int id;
int complet;
Cloth (int claps, int id, int complet){
this->claps = claps;
this->id = id;
this->complet = complet;
}
bool operator <(const Cloth & c) const{
if (this->claps == c.claps)
return this->id > c.id;
else
return this->claps < c.claps;
}
};
priority_queue<Cloth> pq;
vector<int> colors;
vector<int> days;
vector<int> seen(1e6 + 7, 0);
void load_days(int n){
days.resize(n);
for (int i = 0; i < n; i++){
cin >> days[i];
pq.push(Cloth(days[i] * 5, i, 3));
pq.push(Cloth(days[i] * 3, i, 2));
pq.push(Cloth(days[i] * 2, i, 1));
}
}
void load_colors(int k){
colors.resize(k);
for (int i = 0; i < k; i++){
cin >> colors[i];
}
}
int find_min_use_claps(int k){
vector<int> last_complet;
int pointer = 0;
while (!pq.empty()){
Cloth cloth = pq.top();
pq.pop();
if (seen[cloth.id] == 3 || (cloth.complet == 2 && seen[cloth.id] == 2))
continue;
if (pointer == k)
return -1;
if (cloth.claps <= colors[pointer]){
if (cloth.complet == 3)
last_complet.push_back(cloth.id);
seen[cloth.id] += cloth.complet;
pointer++;
}
else if (cloth.complet != 3){ //jesli jest zbyt malo dla koszulek lub skarpetek
if (last_complet.empty()){
return - 1;
}
else{ //jesli wczesniej byl moment gdzie koszulki i skarpetki dalismy do jednego koloru to w to miejsce dajemy aktualne ubranie
int last_id = last_complet[last_complet.size()-1];
seen[last_id] = 0;
pq.push(Cloth(days[last_id] * 3, last_id, 2)); // dajemy na kolejke koszulki i skarpetki tej osoby u ktorej one sa powieszone na jednym kolorze
pq.push(Cloth(days[last_id] * 2, last_id, 1));
last_complet.pop_back();
}
}
}
return pointer;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(NULL);
int n, k;
cin >> n >> k;
load_days(n);
load_colors(k);
sort(colors.begin(), colors.end(), greater<int>());
int response = find_min_use_claps(k);
if (response == -1)
cout << "NIE\n";
else
cout << response << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApjbGFzcyBDbG90aHsKcHVibGljOgogICAgaW50IGNsYXBzOwogICAgaW50IGlkOwogICAgaW50IGNvbXBsZXQ7CiAKICAgIENsb3RoIChpbnQgY2xhcHMsIGludCBpZCwgaW50IGNvbXBsZXQpewogICAgICAgIHRoaXMtPmNsYXBzID0gY2xhcHM7CiAgICAgICAgdGhpcy0+aWQgPSBpZDsKICAgICAgICB0aGlzLT5jb21wbGV0ID0gY29tcGxldDsKICAgIH0KIAogICAgYm9vbCBvcGVyYXRvciA8KGNvbnN0IENsb3RoICYgYykgY29uc3R7CiAgICAgICAgaWYgKHRoaXMtPmNsYXBzID09IGMuY2xhcHMpCiAgICAgICAgICAgIHJldHVybiB0aGlzLT5pZCA+IGMuaWQ7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gdGhpcy0+Y2xhcHMgPCBjLmNsYXBzOwogICAgfQp9OwogCnByaW9yaXR5X3F1ZXVlPENsb3RoPiBwcTsKdmVjdG9yPGludD4gY29sb3JzOwp2ZWN0b3I8aW50PiBkYXlzOwp2ZWN0b3I8aW50PiBzZWVuKDFlNiArIDcsIDApOwogCnZvaWQgbG9hZF9kYXlzKGludCBuKXsKICAgIGRheXMucmVzaXplKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGNpbiA+PiBkYXlzW2ldOwogICAgICAgIHBxLnB1c2goQ2xvdGgoZGF5c1tpXSAqIDUsIGksIDMpKTsKICAgICAgICBwcS5wdXNoKENsb3RoKGRheXNbaV0gKiAzLCBpLCAyKSk7CiAgICAgICAgcHEucHVzaChDbG90aChkYXlzW2ldICogMiwgaSwgMSkpOwogICAgfQp9CiAKdm9pZCBsb2FkX2NvbG9ycyhpbnQgayl7CiAgICBjb2xvcnMucmVzaXplKGspOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrOyBpKyspewogICAgICAgIGNpbiA+PiBjb2xvcnNbaV07CiAgICB9Cn0KIAppbnQgZmluZF9taW5fdXNlX2NsYXBzKGludCBrKXsKICAgIHZlY3RvcjxpbnQ+IGxhc3RfY29tcGxldDsKICAgIGludCBwb2ludGVyID0gMDsKIAogICAgd2hpbGUgKCFwcS5lbXB0eSgpKXsKICAgICAgICBDbG90aCBjbG90aCA9IHBxLnRvcCgpOwogICAgICAgIHBxLnBvcCgpOwogCiAgICAgICAgaWYgKHNlZW5bY2xvdGguaWRdID09IDMgfHwgKGNsb3RoLmNvbXBsZXQgPT0gMiAmJiBzZWVuW2Nsb3RoLmlkXSA9PSAyKSkKICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICBpZiAocG9pbnRlciA9PSBrKQogICAgICAgICAgICByZXR1cm4gLTE7CiAKICAgICAgICBpZiAoY2xvdGguY2xhcHMgPD0gY29sb3JzW3BvaW50ZXJdKXsKICAgICAgICAgICAgaWYgKGNsb3RoLmNvbXBsZXQgPT0gMykKICAgICAgICAgICAgICAgIGxhc3RfY29tcGxldC5wdXNoX2JhY2soY2xvdGguaWQpOwogICAgICAgICAgICBzZWVuW2Nsb3RoLmlkXSArPSBjbG90aC5jb21wbGV0OwogICAgICAgICAgICBwb2ludGVyKys7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNsb3RoLmNvbXBsZXQgIT0gMyl7IC8vamVzbGkgamVzdCB6Ynl0IG1hbG8gZGxhIGtvc3p1bGVrIGx1YiBza2FycGV0ZWsgCiAgICAgICAgICAgIGlmIChsYXN0X2NvbXBsZXQuZW1wdHkoKSl7CiAgICAgICAgICAgICAgICByZXR1cm4gLSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7IC8vamVzbGkgd2N6ZXNuaWVqIGJ5bCBtb21lbnQgZ2R6aWUga29zenVsa2kgaSBza2FycGV0a2kgZGFsaXNteSBkbyBqZWRuZWdvIGtvbG9ydSB0byB3IHRvIG1pZWpzY2UgZGFqZW15IGFrdHVhbG5lIHVicmFuaWUKICAgICAgICAgICAgICAgIGludCBsYXN0X2lkID0gbGFzdF9jb21wbGV0W2xhc3RfY29tcGxldC5zaXplKCktMV07CiAgICAgICAgICAgICAgICBzZWVuW2xhc3RfaWRdID0gMDsKICAgICAgICAgICAgICAgIHBxLnB1c2goQ2xvdGgoZGF5c1tsYXN0X2lkXSAqIDMsIGxhc3RfaWQsIDIpKTsgLy8gZGFqZW15IG5hIGtvbGVqa2Uga29zenVsa2kgaSBza2FycGV0a2kgdGVqIG9zb2J5IHUga3RvcmVqIG9uZSBzYSBwb3dpZXN6b25lIG5hIGplZG55bSBrb2xvcnplCiAgICAgICAgICAgICAgICBwcS5wdXNoKENsb3RoKGRheXNbbGFzdF9pZF0gKiAyLCBsYXN0X2lkLCAxKSk7CiAgICAgICAgICAgICAgICBsYXN0X2NvbXBsZXQucG9wX2JhY2soKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIAogICAgfQogICAgcmV0dXJuIHBvaW50ZXI7Cn0KIAppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKE5VTEwpOwogCiAgICBpbnQgbiwgazsKICAgIGNpbiA+PiBuID4+IGs7CiAKICAgIGxvYWRfZGF5cyhuKTsKIAogICAgbG9hZF9jb2xvcnMoayk7CiAKICAgIHNvcnQoY29sb3JzLmJlZ2luKCksIGNvbG9ycy5lbmQoKSwgZ3JlYXRlcjxpbnQ+KCkpOwogCiAgICBpbnQgcmVzcG9uc2UgPSBmaW5kX21pbl91c2VfY2xhcHMoayk7CiAKICAgIGlmIChyZXNwb25zZSA9PSAtMSkKICAgICAgICBjb3V0IDw8ICJOSUVcbiI7CiAgICBlbHNlCiAgICAgICAgY291dCA8PCByZXNwb25zZSA8PCAiXG4iOwogCiAgICByZXR1cm4gMDsKfQ==