#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL_
void debug_out() {cerr << endl;}
template<typename Head,typename... Tail> void debug_out(Head H,Tail... T){cerr << ' ' << H; debug_out(T...);}
#define debug(...) cerr << 'L' << __LINE__ << " [" << #__VA_ARGS__ << "]:",debug_out(__VA_ARGS__)
#define dump(x) cerr << 'L' << __LINE__ << " " << #x << " = " << (x) << endl;
#else
#define debug(...) (void(0))
#define dump(x) (void(0))
#endif
#define rep(i,n) for (int i = 0; i < (int)(n); i ++)
#define irep(i,n) for (int i = (int)(n) - 1;i >= 0;--i)
using ll = long long;
using PL = pair<ll,ll>;
using P = pair<int,int>;
constexpr int INF = 1000000000;
constexpr long long HINF = 1000000000000000;
constexpr long long MOD = 1000000007;// = 998244353;
constexpr double EPS = 1e-4;
constexpr double PI = 3.14159265358979;

int N;
ll A[60];
map<PL,ll> mp;
ll dfs(int d,ll val,ll ret) {
    if (d == N - 1){
        return ret;
    }
    PL key = PL{d,val};
    if (mp.count(key)) return mp[key];
    ll k;
    if (d > 0) k = val/(A[d]/A[d-1]);
    else k = val/A[d];
    ll p = k%(A[d+1]/A[d]);
    if (p == 0) {
        ll ans = dfs(d+1,k,ret);
        return mp[key] = ans;
    }
    else {
        ll ans = 0;
        ans += dfs(d+1,k - p,ret);
        ans += dfs(d+1,k - p + A[d+1]/A[d],ret);
        return mp[key] = ans;
    }
}

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);

    ll X;
    cin >> N >> X;
    rep(i,N) cin >> A[i];

    ll ans = dfs(0,X,1);
    cout << ans << '\n';
    return 0;
}
#include <iostream>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
#define rep(i, n) for (ll i = 0; i < (n); i++)
#define rep2(i, s, n) for (ll i = s; i < (n); i++)

int main(){
  int x, y;
  cin >> x >> y;
  int diff = abs(x-y);
  if (diff < 3) cout << "Yes" << endl;
  else cout << "No" << endl;
  
  return 0;
}