Problem:
カロリー計算

食べ物には3大栄養素と呼ばれる「たんぱく質」「脂質」「炭水化物」の３つの栄養素が含まれています。１g（グラム）あたりたんぱく質と炭水化物は 4 kcal（キロカロリー）、脂質は 9 kcal と計算されます。たとえば、下の表によると番号１のケーキにはタンパク質 7 g、脂質 14 g、炭水化物 47 g が含まれています。これをもとに含まれるカロリーを計算すると、4 × 7 + 9 × 14 + 4 × 47 = 342 kcal となります。その他も同様に計算されています。

番号

名前

たんぱく質(g)

脂質(g)

炭水化物(g)

カロリー(kcal)

1

ケーキ

7

14

47

342

2

ポテトチップス

5

35

55

555

3

どら焼き

6

3

59

287

4

プリン

6

5

15

129

分類の対象となるお菓子の個数 n と各お菓子の情報、制限の情報を入力とし、そのお菓子一つだけなら制限を超えることがない（食べてもよい）お菓子の一覧を出力するプログラムを作成してください。

お菓子の情報は、お菓子の番号 s、そのお菓子に含まれるたんぱく質の重量 p、脂質の重量 q、炭水化物の重量 r から構成されています。制限の情報には、含むことができる最大のたんぱく質の重量 P、脂質の重量 Q、炭水化物の重量 R、および摂取することができる最大のカロリー C からなっており、タンパク質、脂質、炭水化物、カロリーのいずれかの一つでも超えると制限違反となり、「食べてはいけないお菓子」と判断されます。

食べてもよいお菓子の一覧は、食べてもよいお菓子の番号を入力順に出力してください。なお、食べてもよいお菓子がなければ”NA”と出力してください。
上の表にある4個のお菓子について、P = 10, Q = 15, R = 50, C = 400 という制限の場合、ケーキとプリンはそれぞれの栄養素及びカロリーが制限値以下なので食べてもよいお菓子に分類されますが、ポテトチップスは炭水化物とカロリー、どら焼きは炭水化物の量が制限値を超えているため食べてはいけないお菓子に分類されます。

入力

複数のデータセットの並びが与えられます。入力の終わりはゼロひとつの行で示されます。各データセットは以下の形式で与えられます。

n
s1 p1 q1 r1
s2 p2 q2 r2
:
sn pn qn rn
P Q R C

1行目にお菓子の数 n (1 ≤ n ≤ 1000)が与えられます。続く n 行に第 i のお菓子の番号 si (1 ≤ si ≤ 1000)、各栄養素の重量を表す整数 pi, qi, ri (0 ≤ pi, qi, ri ≤ 100) が与えられます。

続く行に各栄養素及びカロリーの制限値を表す整数 P, Q, R (0 ≤ P, Q, R ≤ 100), C (0 ≤ C ≤ 1700) が与えられます。

データセットの数は 100 を超えません。

出力

データセットごとに、食べてもよいお菓子の番号または ”NA” を出力します。

入力例

4
1 7 14 47
2 5 35 55
3 6 3 59
4 6 5 15
10 15 50 400
2
1 8 10 78
2 4 18 33
10 10 50 300
0

出力例

1
4
NA

Solution in JAVA (judge verdict: Wrong Answer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;


public class Main {

	public static void main(String[] args) {
		Main main = new Main();
		main.calorieCounting();
		return;
	}
	
	//カロリーを計算する
	private void calorieCounting() {
		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); //標準入力
		
		while (true) {
			
			try {
				
				String inputStr = bufferedReader.readLine();
				int confectioneryNum = Integer.parseInt(inputStr); //お菓子の数
				
				if (confectioneryNum == 0) {
					break;
				}
				
				LinkedList<Integer> numberList = new LinkedList<Integer>(); //お菓子のナンバーのリスト
				LinkedList<Integer> proteinList = new LinkedList<Integer>(); //タンパク質のリスト
				LinkedList<Integer> lipidList = new LinkedList<Integer>(); //脂質のリスト
				LinkedList<Integer> carbohydrateList = new LinkedList<Integer>(); //炭水化物のリスト
				LinkedList<Integer> kcalList = new LinkedList<Integer>(); //カロリーのリスト
				
				//お菓子の情報を入力
				for (int i = 0; i < confectioneryNum; i++) {
					String inputStr2 = bufferedReader.readLine();
					String[] confectioneryInformationStrs = inputStr2.split(" ");
					int num = Integer.parseInt(confectioneryInformationStrs[0]);
					int protein = Integer.parseInt(confectioneryInformationStrs[1]);
					int lipid = Integer.parseInt(confectioneryInformationStrs[2]);
					int carbohydrate = Integer.parseInt(confectioneryInformationStrs[3]);
					int kcal = (4 * protein) + (9 * lipid) + (4 * carbohydrate);
					
					numberList.add(num);
					proteinList.add(protein);
					lipidList.add(lipid);
					carbohydrateList.add(carbohydrate);
					kcalList.add(kcal);
				}
				
				LinkedList<Integer> canEatConfectioneryList = new LinkedList<Integer>(); //食べてもいい菓子の番号を管理する
				Person person = new Person(); //お菓子を食べる人の情報
				
				//各栄養素、カロリーの制限値を入力
				String inputStr3 = bufferedReader.readLine();
				String[] personStrs = inputStr3.split(" ");
				person.setProtein(Integer.parseInt(personStrs[0]));
				person.setLipid(Integer.parseInt(personStrs[1]));
				person.setCarbohydrate(Integer.parseInt(personStrs[2]));
				person.setKcal(Integer.parseInt(personStrs[3]));
				
				for (int i = 0; i < confectioneryNum; i++) {
					
					boolean eatFlag = false; //trueなら食べられるお菓子
					
					//食べられるお菓子かどうかを判定する
					if (proteinList.get(i) < person.getProtein() && lipidList.get(i) < person.getLipid() &&
						carbohydrateList.get(i) < person.getCarbohydrate() && kcalList.get(i) < person.getKcal()) {
						eatFlag = true;
					}
					
					if (eatFlag) {
						canEatConfectioneryList.add(numberList.get(i));
					}
					
				}
				
				if (canEatConfectioneryList.size() == 0) {
					
					System.out.println("NA");
					
				} else {
					
					for (int num : canEatConfectioneryList) {
						System.out.println(num);
					}
					
				}
				
			} catch (IOException e) {
				// TODO 自動生成された catch ブロック
				e.printStackTrace();
			}
			
		}
	}
}

class Person {
	
	int protein = 0; //タンパク質
	int lipid = 0; //脂質
	int carbohydrate = 0; //炭水化物
	int kcal = 0; //カロリー
	
	public int getProtein() {
		return protein;
	}
	
	public void setProtein(int protein) {
		this.protein = protein;
	}
	
	public int getLipid() {
		return lipid;
	}
	
	public void setLipid(int lipid) {
		this.lipid = lipid;
	}
	
	public int getCarbohydrate() {
		return carbohydrate;
	}
	
	public void setCarbohydrate(int carbohydrate) {
		this.carbohydrate = carbohydrate;
	}
	
	public int getKcal() {
		return kcal;
	}
	
	public void setKcal(int kcal) {
		this.kcal = kcal;
	}
	
}