#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=103,M=600005;
int n,m,a[N],s[M],cnt;
int h[M<<1],e[M<<1],ne[M<<1],w[M<<1],tot,d[M],base=2e9;
bool flag=false;
void add(int x,int y,int z)
{
e[++tot]=y,ne[tot]=h[x],h[x]=tot,w[tot]=z;
}
struct zjy
{
int dis,id;
bool operator < (const zjy &t) const{
return dis>t.dis;
}
};
bool vis[M];
queue<int> q;
void dijstra()
{
q.push(0);
vis[0]=1;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=false;
for(int i=h[u];i;i=ne[i])
{
int v=e[i];
if(d[v]>d[u]+w[i])
{
d[v]=d[u]+w[i];
if(!vis[v])
{
q.push(v);
vis[v]=true;
}
}
}
}
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;++i)
{
scanf("%lld",&a[i]);
if(a[i]<=m+1)
{
flag=true;
}
else
{
s[++cnt]=a[i];
base=min(base,s[cnt]);
for(int j=1;j<=m;++j)
{
s[++cnt]=a[i]-j;
base=min(base,s[cnt]);
}
}
}
if(flag)
{
cout<<"-1";
return 0;
}
memset(d,0x3f3f3f3f,sizeof(d));
for(int i=0;i<base;++i)
{
for(int j=1;j<=cnt;++j)
{
add(i,(i+s[j])%base,s[j]);
}
}
d[0]=0;
int ans=0;
dijstra();
for(int i=1;i<base;++i)
{
ans=max(ans,d[i]);
}
if(ans==0x3f3f3f3f)
{
cout<<"-1";
}
else
{
cout<<ans-base;
}
return 0;
}