#include <bits/stdc++.h>
using namespace std;
#define all(a)a.begin(),a.end()
using ll=long long;
const int INF = 1<<30;
const ll INFll =1LL<<62;
//const int mod= int(1e9)+7;
const int mod=998244353;
using P = pair<int,int>;
using Pl= pair<ll,ll>;
using ld=long double;
using V=vector<int>;
using Vl=vector<ll>;
using VV=vector<vector<int>>;
using VVl=vector<vector<ll>>;

// modint: mod 計算を int を扱うように扱える構造体
template<int MOD> struct Fp {
    long long val;
    constexpr Fp(long long v = 0) noexcept : val(v % MOD) {
        if (val < 0) val += MOD;
    }
    constexpr int getmod() { return MOD; }
    constexpr Fp operator - () const noexcept {
        return val ? MOD - val : 0;
    }
    constexpr Fp operator + (const Fp& r) const noexcept { return Fp(*this) += r; }
    constexpr Fp operator - (const Fp& r) const noexcept { return Fp(*this) -= r; }
    constexpr Fp operator * (const Fp& r) const noexcept { return Fp(*this) *= r; }
    constexpr Fp operator / (const Fp& r) const noexcept { return Fp(*this) /= r; }
    constexpr Fp& operator += (const Fp& r) noexcept {
        val += r.val;
        if (val >= MOD) val -= MOD;
        return *this;
    }
    constexpr Fp& operator -= (const Fp& r) noexcept {
        val -= r.val;
        if (val < 0) val += MOD;
        return *this;
    }
    constexpr Fp& operator *= (const Fp& r) noexcept {
        val = val * r.val % MOD;
        return *this;
    }
    constexpr Fp& operator /= (const Fp& r) noexcept {
        long long a = r.val, b = MOD, u = 1, v = 0;
        while (b) {
            long long t = a / b;
            a -= t * b; swap(a, b);
            u -= t * v; swap(u, v);
        }
        val = val * u % MOD;
        if (val < 0) val += MOD;
        return *this;
    }
    constexpr bool operator == (const Fp& r) const noexcept {
        return this->val == r.val;
    }
    constexpr bool operator != (const Fp& r) const noexcept {
        return this->val != r.val;
    }
    friend constexpr ostream& operator << (ostream &os, const Fp<MOD>& x) noexcept {
        return os << x.val;
    }
    friend constexpr Fp<MOD> modpow(const Fp<MOD> &a, long long n) noexcept {
        if (n == 0) return 1;
        auto t = modpow(a, n / 2);
        t = t * t;
        if (n & 1) t = t * a;
        return t;
    }
};
using mint = Fp<mod>;
const int MAX = 1001001;
long long fac[MAX], finv[MAX], inv[MAX];

// テーブルを作る前処理
void COMinit() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < MAX; i++){
        fac[i] = fac[i - 1] * i % mod;
        inv[i] = mod - inv[mod%i] * (mod / i) % mod;
        finv[i] = finv[i - 1] * inv[i] % mod;
    }
}

// 二項係数計算
long long COM(int n, int k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % mod) % mod;
}

 ll nPr(int n, int r) {
    if (n < 0 || r < 0 || n < r) return 0;
    return fac[n] * finv[n - r] % mod;
}


int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    COMinit();
    int n,k;cin >>n>>k;
    vector<vector<mint>>a(n,vector<mint>(k+1,1));
    for (int i = 0; i < n; ++i) {
        int c;cin >>c;
        a[i][1]=c;
    }
    for (int i = 0; i < n; ++i) {
        auto r=a[i][1];
        for (int j = 2; j <=k; ++j) {
            a[i][j]=a[i][j-1]*r;
        }
    }
    vector<mint>sum(k+1,0);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j <=k; ++j) {
            sum[j]+=a[i][j];
        }
    }
    for (int x = 1; x <=k; ++x) {
        mint ans=0;
        for (int i = 0; i <=x; ++i) {
            ans+=(sum[i]*sum[x-i]-sum[x])*COM(x,i);
        }
        ans/=2;
        cout <<ans<<"\n";
    }
}
#include<bits/stdc++.h>
using namespace std;

typedef pair<int,int> pii;
typedef pair<string,int> psi;
typedef pair<int,string> pis;
typedef array<int,2> aii;
typedef array<int,3> aiii;
typedef array<int,4> aiiii;
typedef unsigned long long ull;
typedef long long int ll;
typedef array<ll,2> all;
typedef array<ll,3> alll;
typedef array<ll,4> allll;

#define pb push_back
#define ff first
#define ss second
#define MAX 100005
#define MOD 1000000007
#define INF 1e9+100
vector<alll>adj[MAX];
int xMove[] = { 0,1,0,-1,1,1,-1,-1, 2, 2, -2, -2, 1, 1, -1, -1 };
int yMove[] = { 1,0,-1,0,1,-1,1,-1, 1, -1, 1, -1, 2, -2, 2, -2 };
int dp[101][101],n,K,arr[101];
ll x;

int main()
{
    //freopen("input.in","r",stdin);
    //freopen("output.txt","w",stdout);
    cin.tie(0),cout.tie(0);
    ios_base::sync_with_stdio(0);
    cout.setf(ios::fixed);
    cout.precision(10);
    int TC=1;
    int k,m,q;
    //cin>>TC;
    for(int t1=1; t1<=TC; t1++)
    {
        cin>>n>>x;
        for(int i=1; i<=n; i++)
            cin>>arr[i];

        ll ans=2e18;

        for(int k=1; k<=n; k++)
        {
            memset(dp,-1,sizeof dp);
            dp[0][0]=0;
            for(int i=1; i<=n; i++)
            {
                for(int j=k-1; j>=0; j--)
                {
                    for(int m=0; m<k; m++)
                    {
                        if(dp[j][m]!=-1)
                            dp[j+1][(m+arr[i])%k]=max(dp[j+1][(m+arr[i])%k],dp[j][m]+arr[i]);
                    }
                }
            }
            ll cur=x%k;
            if(dp[k][cur]>0)
                ans=min(ans,(x-dp[k][cur])/k);
        }
        cout<<ans<<endl;
    }
    return 0;
}
