//優化#pragma GCC optimize(2)//C#include<string.h>#include<stdio.h>#include<stdlib.h>#include<math.h>//C++#include<unordered_map>#include<algorithm>#include<iostream>#include<istream>#include<iomanip>#include<climits>#include<float.h>#include<cstdio>#include<string>#include<vector>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>//宏定義#define N 1010#define DoIdo main//#define scanf scanf_s#define it set<ll>::iterator#define TT template<class T>#define cint const int //定義+命名空間typedeflonglong ll;typedefunsignedlonglong ull;constint mod =10007;const ll INF =1e18;constint maxn =1e6+10;usingnamespace std;//全局變量
ll n, m;
ll u[25];
ll ans =0;//函數區
ll max(ll a, ll b){return a > b ? a : b;}
ll min(ll a, ll b){return a < b ? a : b;}
ll loop(ll n, ll p){return(n % p + p)% p;}voiddfs(ll pos, ll opt, ll mul){//如果遍歷的數超過輸入的數,則返回if(pos == n +1)return;//這就是u[pos] * mul <= m的變形//這樣可以預防long long溢出if(u[pos]<= m / mul){//加一下對答案的貢獻
ans += opt * m /(mul * u[pos]);//取的情況dfs(pos +1, opt, mul);//不取的情況dfs(pos +1,-opt, mul * u[pos]);}elsereturn;}//主函數intDoIdo(){
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
cin >> n >> m;for(int i =1; i <= n; i++){
cin >> u[i];}sort(u +1, u + n +1);dfs(1,1,1);
cout << ans << endl;return0;}//分割線---------------------------------QWQ/*
*/