#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<long long> dp(k, -1);
// 注意:不初始化 dp[0] 为 0,因为空集不算有效选择
for (int i = 0; i < n; ++i) {
long long x;
cin >> x;
vector<long long> next_dp(dp);
// 从已有状态更新
for (int r = 0; r < k; ++r) {
if (dp[r] != -1) {
int new_r = (r + x % k) % k;
next_dp[new_r] = max(next_dp[new_r], dp[r] + x);
}
}
// 当前数可以单独成为起点
int r = x % k;
next_dp[r] = max(next_dp[r], x);
dp = next_dp;
}
// 修复点:dp[0] == 0 表示“只选了空集”,也不合法!
if (dp[0] <= 0) cout << -1 << endl;
else cout << dp[0] << endl;
return 0;
}