#include <iostream>
#include <bits/stdc++.h> // 包含所有标准库
using namespace std;

int main() {
    int n, k; // n 表示数组的大小,k 表示取模的值
    long long arr[1001]; // 存放输入的数组
    cin >> n >> k; // 输入 n 和 k
    for(int i = 1; i <= n; i++) {
        cin >> arr[i]; // 输入数组的元素
    }

    long long dp[1001][1001] = {0}; // 初始化动态规划数组,默认为 0

    // 遍历数组的每个元素
    for(int i = 1; i <= n; i++) {
        // 先复制前一天的状态
        for(int j = 0; j < k; j++) {
            dp[i][j] = dp[i - 1][j];
        }
        // 更新动态规划数组
        for(int j = 0; j < k; j++) {
            int l = (dp[i - 1][j] + arr[i]) % k; // 计算新的取模值
            dp[i][l] = max(dp[i - 1][l], dp[i - 1][j] + arr[i]); // 更新最大值
        }
        // 可以通过下面的注释部分来调试输出每一行的 dp 数组
        // for(int j = 0; j < k; j++)
        //     cout << dp[i][j] << " ";
        // cout << endl;
    }

    int ans = -1; // 初始化答案为 -1
    if(dp[n][0] != 0) { // 如果 dp[n][0] 不为 0
        cout << dp[n][0]; // 输出 dp[n][0] 的值
    } else {
        cout << -1; // 否则输出 -1
    }

    return 0;
}
// 64 位输出请用 printf("%lld")