#include <bits/stdc++.h>
using namespace std;

int main()
{
  int N;
  cin >> N;
  
  vector<int> A(N);
  for(int i = 0; i < N; i++) cin >> A.at(i);
  
  bool change = false;
  
  if(N == 1) cout << A.at(0) << endl;
  else
  {
    int mod;
    int j;
    int max;
    int min;
    for( ; ; )
    {
      max = A.at(0);
      min = A.at(0);
      mod = A.at(0);
      j = 0;
      for(int i = 1; i < N; i++)
      {
        if(max < A.at(i)) max = A.at(i);
        else if(min > A.at(i)) min = A.at(i);
        if(mod > A.at(i))
        {
          mod = A.at(i);
          j = i;
        }
      }
      if(max == min) break;
      for(int i = 0; i < N; i++)
      {
        if(i != j) A.at(i) = A.at(i) %= mod;
        if(A.at(i) == 0) A.at(i) += mod;
      }
    }
    cout << min << endl;
  }
}
#include <bits/stdc++.h>

using ull = unsigned long long int;
using ll = long long;
using ld = long double;
using pii = std::pair<int,int>;
using pll = std::pair<ll, ll>;
using vi = std::vector<int> ;
using vvi = std::vector<vi> ;
using vll = std::vector<ll>;
using vvll = std::vector<vll>;
using vd = std::vector<double> ;
using vvd = std::vector<vd> ;
using qi = std::queue<int> ;
using vpii = std::vector<std::pair<int, int> >;
using vpll = std::vector<pll>;
using namespace std;

#define rep(i,j) for(int (i)=0;(i)<(j);(i)++)
#define drep(i,j) for(int (i)=(j);(i) >= 0;(i)--)


template<class T1, class T2> inline void chmin(T1 &a, T2 b){if(a > b) a = b;}
template<class T1, class T2> inline void chmax(T1 &a, T2 b){if(a < b) a = b;}
template<class T> inline void pri(T a){cout << a << endl;}
template<class Z> using vec = vector<Z>;
template<class T> using min_priority_queue = priority_queue<T, vector<T>, greater<T>>;

inline void IN(void){
  return;
}

template <typename First, typename... Rest>
void IN(First& first, Rest&... rest){
  cin >> first;
  IN(rest...);
  return;
}

inline void OUT(void){
 cout << endl;
  return;
}

template <typename First, typename... Rest>
void OUT(First first, Rest... rest){
cout << first << " " ; 
OUT(rest...);
   return;
}
const int max_n = 3 * (1e5) + 1;
const int max_m = 83 * (1e5) + 1;
const int INF = int(1e9);
const long long int INFL = LLONG_MAX;

int n,m,k;
string S;
int ans;

vll A;

ll f(ll mod,ll n,ll x)
{
  ll dp[n+1][mod+1][mod];//
  memset(dp,-1,sizeof(dp));
  dp[0][0][0] = 0;
  rep(i,n)
  {
    rep(j,mod+1)
    {
      rep(k,mod)
      {
        if(dp[i][j][k] < 0)continue;
        chmax(dp[i+1][j][k],dp[i][j][k]);
        if(j<mod)chmax(dp[i+1][j+1][(k+A[i])%mod],dp[i][j][k] + A[i]);
      }
    }
  }
  x = x%mod;
  return dp[n][mod][x];
}

void solve()
{
  ll N;
  ll X;
  IN(N,X);
  A.resize(N);
  rep(i,N)IN(A[i]);
  ll ans = INFL;
  for(ll i=1;i<=N;i++)
  {
    ll tmp = f(i,N,X);
    //OUT(tmp);
    if(tmp>0)chmin(ans,(X - tmp)/i);
  }
  cout << ans << endl;
}

signed main (int argc, char* argv[]) 
{
   cin.tie(0);
   ios::sync_with_stdio(false);
   int cases=1;
   //IN(cases);
   while(cases--)solve();
   //pri(ans);
   //for(auto c : ans){cout << c << endl;}
   //cout << fixed << setprecision(15) << ans << endl;
   return 0;
}