// Slower C++ solution:
#include <bits/stdc++.h>

#include <ext/numeric>



using namespace std;

using namespace __gnu_cxx;



#define sz(v)           ((int)((v).size()))

#define clr(v, d)       memset(v, d, sizeof(v))

#define rep(i, v)       for(int i=0; i<sz(v); ++i)

#define lp(i, n)        for(int i=0; i<(int)(n); ++i)

#define lpi(i, j, n)    for(int i=(j); i<(int)(n); ++i)

#define lpd(i, j, n)    for(int i=(j); i>=(int)(n); --i)

//#define INF             1000000000

//#define INF             100000000000000



typedef long long ll;

typedef pair<int, int> ii;

typedef vector<ii> vii;

typedef vector<int> vi;



void init(){

	std::ios_base::sync_with_stdio(false);

	cin.tie(NULL);

	cout.tie(NULL);

}



const int N = 1e5+5;

const int M = 104;



int dp[N][2];



int arr[M];



int n, k;



bool solve(int cur_k, bool turn){

	if(cur_k < 0)

		return turn;

	int & cur = dp[cur_k][turn];

	if(cur != -1)

		return cur;

	lp(i, n)

		if(solve(cur_k - arr[i], !turn) == turn)

			return (cur = turn);

	return (cur = !turn);

}



int main()

{

	clr(dp, -1);

	cin >> n >> k;

	lp(i, n)

		cin >> arr[i];

	cout << (solve(k, 0)?"Second":"First");

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.7898451350761166x):
///*بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم*///



//#pragma GCC optimize("Ofast")

//#pragma GCC target("avx,avx2,fma")

//#pragma GCC optimization ("unroll-loops")



#include <bits/stdc++.h>

using namespace std;

#define ln '\n'

#define inp(x) scanf("%lld",&x)

#define inp2(a,b) scanf("%lld %lld",&a,&b)



#define f0(i,b) for(int i=0;i<(b);i++)

#define f1(i,b) for(int i=1;i<=(b);i++)



#define MOD 1000000007

#define PI acos(-1)

#define ll long long int

typedef pair<int,int> pii;

typedef pair<ll, ll> pll;

#define pb push_back

#define F first

#define S second

#define sz size()

#define LCM(a,b) (a*(b/__gcd(a,b)))

//#define harmonic(n) 0.57721566490153286060651209+log(n)+1.0/(2*n)

#define SORT_UNIQUE(c) (sort(c.begin(),c.end()), c.resize(distance(c.begin(),unique(c.begin(),c.end()))))

#define all(v) v.begin(),v.end()

#define MEM(a, b) memset(a, b, sizeof(a))



#define fastio ios_base::sync_with_stdio(false)



///Inline functions



inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }

inline bool isLeapYear(ll year) { return (year%400==0) | (year%4==0 && year%100!=0); }

inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }

inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }

inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }

inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }

inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }

inline ll modInverse(ll a) { return modPow(a, MOD-2); }

inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

inline bool isInside(pii p,ll n,ll m){ return (p.first>=0&&p.first<n&&p.second>=0&&p.second<m); }

inline bool isInside(pii p,ll n){ return (p.first>=0&&p.first<n&&p.second>=0&&p.second<n); }

inline bool isSquare(ll x){ ll s = sqrt(x);    return (s*s==x); }

inline bool isFib(ll x) { return isSquare(5*x*x+4)|| isSquare(5*x*x-4); }

inline bool isPowerOfTwo(ll x){ return ((1LL<<(ll)log2(x))==x); }





/// DEBUG --------------------------------------------------------------------------------->>>>>>



///**

template < typename F, typename S >

ostream& operator << ( ostream& os, const pair< F, S > & p )

{

    return os << "(" << p.first << ", " << p.second << ")";

}



template < typename T >

ostream &operator << ( ostream & os, const vector< T > &v )

{

    os << "{";

    for (auto it = v.begin(); it != v.end(); ++it)

    {

        if ( it != v.begin() )

            os << ", ";

        os << *it;

    }

    return os << "}";

}



template < typename T >

ostream &operator << ( ostream & os, const set< T > &v )

{

    os << "[";

    for (auto it = v.begin(); it != v.end(); ++it)

    {

        if ( it != v.begin())

            os << ", ";

        os << *it;

    }

    return os << "]";

}



template < typename F, typename S >

ostream &operator << ( ostream & os, const map< F, S > &v )

{

    os << "[";

    for (auto it = v.begin(); it != v.end(); ++it)

    {

        if ( it != v.begin() )

            os << ", ";

        os << it -> first << " = " << it -> second ;

    }

    return os << "]";

}



#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)



clock_t tStart = clock();

#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)



void faltu ()

{

    cerr << endl;

}



template <typename T>

void faltu( T a[], int n )

{

    for (int i = 0; i < n; ++i)

        cerr << a[i] << ' ';

    cerr << endl;

}



template <typename T, typename ... hello>

void faltu( T arg, const hello &... rest)

{

    cerr << arg << ' ';

    faltu(rest...);

}



/// TEMPLATE ----------------------------------------------------------------------->>>>>>





struct func

{

//this is a sample overloading function for sorting stl

    bool operator()(pii const &a, pii const &b)

    {

        if(a.F==b.F)

            return (a.S<b.S);

        return (a.F<b.F);

    }

};

/*------------------------------Graph Moves----------------------------*/

//Rotation: S -> E -> N -> W

//const int fx[] = {0, +1, 0, -1};

//const int fy[] = {-1, 0, +1, 0};

//const int fx[]={+0,+0,+1,-1,-1,+1,-1,+1};   // Kings Move

//const int fy[]={-1,+1,+0,+0,+1,+1,-1,-1};  // Kings Move

//const int fx[]={-2, -2, -1, -1,  1,  1,  2,  2};  // Knights Move

//const int fy[]={-1,  1, -2,  2, -2,  2, -1,  1}; // Knights Move

/*---------------------------------------------------------------------*/



/// Bit Operations

/// count set bit C = (num * 0x200040008001ULL & 0x111111111111111ULL) % 0xf; /// 32 bit integer

/// inline bool checkBit(ll n, int i) { return n&(1LL<<i); }

/// inline ll setBit(ll n, int i) { return n|(1LL<<i); }

/// inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }





/// ************************************** Code starts here ****************************************** */



const ll INF = 0x3f3f3f3f3f3f3f3f;

const long double EPS = 1e-9;

const int inf = 0x3f3f3f3f;

const int mx = (int)1e5+9;



ll n,m,a,b,t,i,j,d,cs=0,counT=0,k,ans=0,l=0,sum1=0,sum=0,Max,Min,num;

vector<ll>vc;

map<ll,ll>mp;





int main()

{

  //  freopen("in.txt","r",stdin);

  fastio;

  cin >> n >> k ;

  f0(i,n)

  {

      cin >> a ;

      vc.pb(a);

  }



  ll dp[k+9];

  MEM(dp,-1);



  for(i=0;i<=k;i++)

  {

      for(j=0;j<n;j++)

      {

          if(i>=vc[j] and dp[i-vc[j]]==-1)

            dp[i] = 1;

      }

  }

  cout << (dp[k]==1 ? "First\n" : "Second\n");



  /// Comment the debugger section

}