#include <bits/stdc++.h>
using namespace std;
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T>
inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
const double EPS = 1e-10;
const double PI = acos(-1.0);
const long long INFL = 9223372036854775807LL / 10;
const int INFI = 2147483647 / 10;
const int limit = 1e5 + 1;
int dp[limit];
int A[100];
set<int> A_set;
int N, K;
int min_a = 1e8;
bool solve(int k) {
  if (dp[k] > 0) {
    return true;
  } else if (dp[k] < 0) {
    return false;
  }
  if (A_set.find(k) != A_set.end()) {
    return true;
  } else if (k < min_a) {
    return false;
  } else {
    bool isWin = false;
    for (int i = (0); i < (N); ++i) {
      isWin |= !solve(k - A[i]);
    }
    dp[k] = isWin ? 1 : -1;
    return isWin;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> N >> K;
  for (int i = (0); i < (N); ++i) {
    int a;
    cin >> a;
    A[i] = a;
    min_a = min(min_a, a);
    A_set.insert(a);
  }
  for (int i = (0); i < (K + 1); ++i) {
    dp[N] = 0;
  }
  cout << (solve(K) ? "First" : "Second") << endl;
}
