#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int a[101],f[101][101];//f[i][j]:前i种糖果%k=j时的糖果总数;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
for(int j=0;j<k;j++)//%k的余数
{
f[i][j]=f[i-1][j];//第i个糖果不拿的值
int tmp=(k+j-a[i]%k)%k;//k+是为了防止j-a[i]%k是负数
//第i个糖果拿,tmp为f[i-1][?]上一个状态的余数;
//因为余数j是由这一个状态的余数a[i]%k,和上一个状态的余数
//相加再%k所得。因为这个糖果拿,所以最值为上一个状态的最值
//再加上这个糖果的数目;所以我们就要求除上一个状态f[i-1][?]
if(!tmp||f[i-1][tmp])//当上一个状态余数为0或者有值说明能推出下一个
f[i][j]=max(f[i][j],f[i-1][tmp]+a[i]);
}
}
printf("%d",f[n][0]);//n个糖果%k为0的最大值
return 0;
}