/*
f[i][j] 表示前i个物品中,总价值%k=j的最大价值
*/
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int n, m;
int f[N][N];
int w[N];
int main()
{
// 要求恰好是k的倍数,所以要f[0][0] = 0, f[0][1~N] = 负无穷
for (int i = 0; i <= N; i ++ )
{
if (i == 0) f[0][i] = 0;
else f[0][i] = -0x3f3f3f3f;
}
cin >> n >> m;
for (int i = 1; i <= n; i ++ ) cin >> w[i];
for (int i = 1; i <= n; i ++ )
for (int j = 0; j <= m - 1; j ++ )
{
f[i][j] = f[i - 1][j];
f[i][j] = max(f[i][j], f[i - 1][((j - w[i]) % m + m) % m] + w[i]);//(j - w[i]) % m有可能为负
}
cout << f[n][0] << endl;
return 0;
}