優秀なプログラマになるためには,数えきれないほどの種類のスキルが必要である. スキルの種類によって重要性は異なっており, プログラミングの総合力は各スキルのレベルと重要性の積の総和で評価される.
あなたはこの夏,夏期プログラミング講習の受講を考えている. 講習には種々のスキルのためのコースがある. あるスキルのためのコースを受講すれば, そのスキルのレベルが払った授業料に比例して, 1 円払うごとに 1 レベルだけ高まるが, スキルのレベルにはそれぞれ上限があり,いくらお金をかけてもそれ以上に高めることはできない. また,各スキルは独立ではなく,最も基礎的なコース以外は, 各コースの受講のためには,その前提となるスキルがあるレベル以上でなければならない.
あなたは限られた予算内でプログラミング総合力評価をできるだけ高めたい.
入力は最大 100 個のデータセットからなる. 各データセットは次の形式で表される.
n k
h1 ... hn
s1 ... sn
p2 ... pn
l2 ... ln
入力の終わりは,2 つのゼロからなる行で表される.
各データセットについて, 全スキルのレベルがゼロの状態から始めて, 授業料予算の範囲内で到達できる最高のプログラミング総合力評価値, すなわち各スキルのレベルと重要性の積の総和の最大値を, ひとつの整数として1行に出力せよ. 予算は使い切らなくてもかまわない.
3 10 5 4 3 1 2 3 1 2 5 2 5 40 10 10 10 10 8 1 2 3 4 5 1 1 2 3 10 10 10 10 5 10 2 2 2 5 2 2 2 2 5 2 1 1 2 2 2 1 2 1 0 0
18 108 35