import java.util.HashMap; import java.util.Scanner; public class Main { static int N, V; static int[] A; static HashMap memo = new HashMap<>(); // 状態 (v, used) を一意のlong値にエンコードする static long encode(int v, int used) { return (((long) v) << 32) | (used & 0xffffffffL); } // 再帰関数:残りの値 v と使用済みビットマスク used に対して勝ち手かどうかを判定 static boolean f(int v, int used) { long key = encode(v, used); if (memo.containsKey(key)) { return memo.get(key); } // 勝ち手が見つからない場合は false boolean win = false; for (int i = 0; i < N; i++) { // すでに使われた数字ならスキップ if ((used & (1 << i)) != 0) continue; // v から A[i] を引けないならスキップ if (v - A[i] < 0) continue; int nu = used | (1 << i); // 相手が負ける状態になるなら、自分は勝ち if (!f(v - A[i], nu)) { memo.put(key, true); return true; } } memo.put(key, win); return win; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 入力の読み込み N = sc.nextInt(); V = sc.nextInt(); A = new int[N]; int total = 0; for (int i = 0; i < N; i++) { A[i] = sc.nextInt(); total += A[i]; } // すべての数値の合計が V 以下なら引き分け if (total <= V) { System.out.println("Draw"); return; } // ゲーム開始時点 (v=V, used=0) の状態から勝ち手を判定 boolean win = f(V, 0); if (win) { System.out.println("First"); } else { System.out.println("Second"); } } }