#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 1e3 + 5;
int f[MAXN],dp[MAXN][MAXN];;
signed main()
{
int n, k; cin >> n >> k;
//对第一层初始化一下
for(int i = 0; i <= n; i++) dp[0][i] = -1e18;
dp[0][0] = 0;
for(int i = 1; i <= n; i++)cin >> f[i];
//当f[i]余数是j时,需要找之前应该补的数,没有的话就直接继承上一层
for(int i = 1; i <= n; i++)
for(int j = 0; j <= k; j++)
dp[i][j] = max(dp[i-1][j], dp[i-1][(f[i] + j)% k] + f[i]);
if(dp[n][k])cout << dp[n][k];//有就输出没有就输出-1
else cout << -1;
return 0;
}

京公网安备 11010502036488号