#include <iostream>
#include <cstring>
using namespace std;
const int N = 1e5+10,M=1e3+10;
typedef long long LL;
LL f[5][M];
int w[N];
int main()
{
memset(f,-0x3f,sizeof f);//除了前i个物品选0个%k为0,其他不合法,防止转移
f[0][0]=0;
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=1;i<=n;i++)
for(int j=3;j>=1;j--)
for(int k=0;k<m;k++)
f[j][k]=max(f[j][k],f[j-1][((k-w[i])%m+m)%m]+w[i]);
cout<<f[3][0];
return 0;
}