#include <bits/stdc++.h>
using namespace std;
long long int n, m;
void get(vector<long long int> &a, set<long long int> &v1) {
  long long int i, j;
  for (i = 0; i < (1 << ((long long int)a.size())); i++) {
    long long int s = 0;
    for (j = 0; j < (long long int)a.size(); j++) {
      if (i & (1 << j)) s = (s + a[j]) % m;
    }
    v1.insert(s);
  }
}
int main() {
  long long int i, j, k;
  cin >> n >> m;
  vector<long long int> a(n / 2);
  set<long long int> v1, v2;
  vector<long long int> b(n - n / 2);
  for (i = 0; i < n / 2; i++) cin >> a[i];
  for (i = 0; i < (n - n / 2); i++) cin >> b[i];
  get(a, v1);
  get(b, v2);
  long long int ans = 0;
  for (auto j : v1) {
    long long int g = m - j - 1;
    auto p = v2.lower_bound(g);
    if (p != v2.end()) {
      ans = max(ans, (j + *p) % m);
    }
    if (p != v2.begin()) p--, ans = max(ans, (*p + j) % m);
  }
  cout << ans << '\n';
}
