Problem:
Score : 100 points

Problem Statement

There is a set A = \{ a_1, a_2, \ldots, a_N \} consisting of N positive integers.
Taro and Jiro will play the following game against each other.

Initially, we have a pile consisting of K stones.
The two players perform the following operation alternately, starting from Taro:

Choose an element x in A, and remove exactly x stones from the pile.

A player loses when he becomes unable to play.
Assuming that both players play optimally, determine the winner.

Constraints

All values in input are integers.

1 \leq N \leq 100

1 \leq K \leq 10^5

1 \leq a_1 < a_2 < \cdots < a_N \leq K

Input

Input is given from Standard Input in the following format:

N K
a_1 a_2 \ldots a_N

Output

If Taro will win, print First; if Jiro will win, print Second.

Sample Input 1

2 4
2 3

Sample Output 1

First

If Taro removes three stones, Jiro cannot make a move.
Thus, Taro wins.

Sample Input 2

2 5
2 3

Sample Output 2

Second

Whatever Taro does in his operation, Jiro wins, as follows:

If Taro removes two stones, Jiro can remove three stones to make Taro unable to make a move.

If Taro removes three stones, Jiro can remove two stones to make Taro unable to make a move.

Sample Input 3

2 7
2 3

Sample Output 3

First

Taro should remove two stones. Then, whatever Jiro does in his operation, Taro wins, as follows:

If Jiro removes two stones, Taro can remove three stones to make Jiro unable to make a move.

If Jiro removes three stones, Taro can remove two stones to make Jiro unable to make a move.

Sample Input 4

3 20
1 2 3

Sample Output 4

Second

Sample Input 5

3 21
1 2 3

Sample Output 5

First

Sample Input 6

1 100000
1

Sample Output 6

Second

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

/**
 * Let S(n, k) be the score of the game for player 1 using only the first n
 * elements of A if there are currently k stones in play.  If player 1 wins
 * the game, S(n, k) will be 1.  Otherwise, S(n, k) will be -1.
 * 
 * On player 1's turn, he has two types of options - he can either take A[n]
 * stones from the pile, or he can look through the remaining n-1 options to
 * take stones from the pile.  Then if he is playing optimally:
 * 
 * S(n, k) = max(-S(n, k - A[n]), S(n-1, k)) if k >= A[n]
 * S(n, k) = S(n-1, k) otherwise
 * S(0, k) = -1
 */

#include <stdio.h>
#include <stdlib.h>

char max(char a, char b)
{
    return a > b ? a : b;
}

int solution(int *a, int N, int K)
{
    char S[N+1][K+1];
    int n, k;
    
    for (k=0; k<=K; k++)
    {
        S[0][k] = -1;
    }
    
    for (n=1; n<=N; n++)
    {
        for (k=0; k<=K; k++)
        {
            if (k >= a[n-1])
            {
                S[n][k] = max(-S[n][k-a[n-1]], S[n-1][k]);
            }
            else
            {
                S[n][k] = S[n-1][k];
            }
        }
    }
    
    /*for (n=0; n<=N; n++)
    {
        for (k=0; k<=K; k++)
        {
            printf("%d\t", S[n][k]);
        }
        printf("\n");
    }*/
    
    return S[N][K];
}

int main(int argc, char **argv)
{
	int N, K;
	int i;
	
	scanf("%d %d", &N, &K);
	
	int a[N];
	
	for (i=0; i<N; i++)
	{
	    scanf("%d", &a[i]);
	}
	
	printf("%s\n", solution(a, N, K) == 1 ? "First" : "Second");
	return 0;
}