#include <bits/stdc++.h>
const long double PI = acos(-1.0);
using namespace std;
set<long long> s[2];
int n, m;
vector<int> v[2];
long long amid;
void gen(int idx) {
  int nn = v[idx].size();
  for (int i = 0; i < (1 << nn); i++) {
    long long sm = 0;
    for (int j = 0; j < nn; j++) {
      if (i & (1 << j)) sm += v[idx][j];
    }
    sm %= m;
    s[idx].insert(sm);
    amid = max(amid, sm);
  }
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    v[i % 2].push_back(x % m);
  }
  gen(0);
  gen(1);
  long long mx = *s[1].rbegin();
  for (auto x : s[0]) {
    long long rem = m - x - 1;
    auto y = s[1].upper_bound(rem);
    if (y != s[1].begin()) {
      y--;
      amid = max(amid, (x + *(y)) % m);
    }
  }
  cout << amid << '\n';
}
