#include <bits/stdc++.h>
const unsigned int MODULO = 1e9 + 7;
const unsigned int INF = std::numeric_limits<int>::max();
const int NINF = std::numeric_limits<int>::min();
template <class T>
void write(const T &a, char del = '\n') {
  if (del == '~')
    std::cout << a;
  else
    std::cout << a << del;
}
template <class T>
void line(const T &w) {
  for (int i = 0; i < (w + 1) / 2; i++) write('_', '_');
  std::cout << "\n";
}
template <class T>
void read(T &a) {
  std::cin >> a;
}
template <class T>
T add(T a, T b, T m) {
  a = a % m;
  b = b % m;
  return (a + b) % m;
}
template <class T>
T mul(T a, T b, T m) {
  a = a % m;
  b = b % m;
  return (a * b) % m;
}
template <class T>
T gcd(T a, T b) {
  if (b > a) {
    return gcd(b, a);
  }
  if (b == 0) {
    return a;
  }
  return gcd(b, a % b);
}
template <class T>
T bexp(T a, T b, T m) {
  if (b == 1) {
    return a;
  }
  if (b & 1) {
    return mul(a, bexp(a, b - 1, m), m);
  }
  T c = bexp(a, b / 2, m);
  return mul(c, c, m);
}
template <class T>
T inv(T a, T m) {
  return bexp(a, m - 2, m);
}
namespace ds {
template <class T>
struct Point {
  T x, y, z;
  Point(T _x = 0, T _y = 0, T _z = 0) : x(_x), y(_y), z(_z){};
};
template <class T>
struct Graph {
  std::vector<T> *adj;
  Graph(T n) { adj = new std::vector<T>[n]; }
  void add(T u, T v, bool d = 0) {
    adj[u].push_back(v);
    if (!d) {
      adj[v].push_back(u);
    }
  }
  void w_add(T u, T v, T w, bool d = 0) {
    adj[u].push_back(std::make_pair(v, w));
    if (!d) {
      adj[v].push_back(std::make_pair(u, w));
    }
  }
};
}  // namespace ds
void time(void func()) {
  std::chrono::time_point<std::chrono::high_resolution_clock> start, end;
  start = std::chrono::high_resolution_clock::now();
  func();
  end = std::chrono::high_resolution_clock::now();
  long long elapsed_time =
      std::chrono::duration_cast<std::chrono::milliseconds>(end - start)
          .count();
  std::cout << "\tElapsed Time: " << elapsed_time << "ms\n";
}
std::unordered_map<int, int> cache;
int minimax(int K, std::vector<int> &W, bool isMaximiser) {
  int res;
  if (isMaximiser) {
    res = -1;
    for (int i = 0; i < W.size(); i++) {
      if (K - W[i] >= 0) {
        res = std::max(res, minimax(K - W[i], W, false));
      }
    }
  } else {
    res = 1;
    for (int i = 0; i < W.size(); i++) {
      if (K - W[i] >= 0) {
        res = std::min(res, minimax(K - W[i], W, true));
      }
    }
  }
  return res;
}
void solve() {
  int N, K;
  std::cin >> N >> K;
  std::vector<int> W(N);
  for (int i = 0; i < N; i++) {
    read(W[i]);
  }
  write(minimax(K, W, true) > 0 ? "First" : "Second");
}
signed main() {
  std::ios_base::sync_with_stdio(0);
  std::cin.tie(NULL);
  std::cout.tie(NULL);
  int T = 1;
  while (T--) {
    solve();
  }
  return 0;
}
