#include <bits/stdc++.h>
using namespace std;
void print() { cout << endl; }
void prints() {}
template <typename T = int>
T get() {
  T x;
  cin >> x;
  return x;
}
template <typename T>
void get(T* x, int n) {
  for (int i = 0; i < n; ++i) {
    cin >> x[i];
  }
}
template <typename T>
void get(T& x, int n) {
  for (int i = 0; i < n; ++i) {
    cin >> x[i];
  }
}
template <typename T, typename... A>
void print(T x, A... r) {
  cout << x << " ";
  print(r...);
}
template <typename T, typename... A>
void prints(T x, A... r) {
  cout << x << " ";
  prints(r...);
}
const long long int mod = 1e9 + 7;
const long long int N = 1e6 + 1;
long long int dp[N];
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long int n = get();
  long long int k = get();
  vector<long long ll> r;
  for (long long int i = 0; i < n; ++i) {
    r.push_back(get());
  }
  long long int m = *min_element(r.begin(), r.end());
  long long int ss = accumulate(r.begin(), r.end(), 0ll);
  for (long long int i = 0; i < m; ++i) {
    dp[i] = -1;
  }
  long long int last = m;
  while (dp[k] == 0) {
    for (auto s : r) {
      for (long long int i = min(k, last + ss); i >= last; --i) {
        if (i >= s and !dp[i]) dp[i] = dp[i - s] * -1;
      }
    }
    last += ss;
  }
  if (dp[k] == 1) {
    print("First");
  } else {
    print("Second");
  }
  return 0;
}
