#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e2 + 5;
const int K = 1e2 + 5;
const int D = 1e2 + 5;
template<typename T>
void maximize(T& a, const T& b) {
if (a < b) a = b;
}
int n, k, d;
int a[N];
ll dp[N][K][D]; // dp[i][j][sum_mod] = Tổng lớn nhất
// khi xét đến phần tử thứ i, đã chọn j phần tử, tổng mod d = sum_mod
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k >> d;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= k; j++) {
for (int sum_mod = 0; sum_mod < d; sum_mod++) {
dp[i][j][sum_mod] = -LINF;
}
}
}
dp[0][0][0] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= k; j++) {
for (int pre_sum_mod = 0; pre_sum_mod < d; pre_sum_mod++) {
// Bỏ qua a[i]
maximize(dp[i][j][pre_sum_mod], dp[i - 1][j][pre_sum_mod]);
// Chọn a[i]
if (j > 0) maximize(dp[i][j][(pre_sum_mod + a[i]) % d], dp[i - 1][j - 1][pre_sum_mod] + a[i]);
}
}
}
ll ans = dp[n][k][0];
if (ans < 0) ans = -1;
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDFlMiArIDU7IApjb25zdCBpbnQgSyA9IDFlMiArIDU7IApjb25zdCBpbnQgRCA9IDFlMiArIDU7IAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtYXhpbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYSA8IGIpIGEgPSBiOyAKfQoKaW50IG4sIGssIGQ7ICAKaW50IGFbTl07CmxsIGRwW05dW0tdW0RdOyAvLyBkcFtpXVtqXVtzdW1fbW9kXSA9IFThu5VuZyBs4bubbiBuaOG6pXQgCgkJCQkvLyBraGkgeMOpdCDEkeG6v24gcGjhuqduIHThu60gdGjhu6kgaSwgxJHDoyBjaOG7jW4gaiBwaOG6p24gdOG7rSwgdOG7lW5nIG1vZCBkID0gc3VtX21vZAoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgIAkKCWNpbiA+PiBuID4+IGsgPj4gZDsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAgCgoJZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPD0gazsgaisrKSB7CgkJCWZvciAoaW50IHN1bV9tb2QgPSAwOyBzdW1fbW9kIDwgZDsgc3VtX21vZCsrKSB7CgkJCQlkcFtpXVtqXVtzdW1fbW9kXSA9IC1MSU5GOyAKCQkJfQoJCX0KCX0KCWRwWzBdWzBdWzBdID0gMDsgCgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPD0gazsgaisrKSB7CgkJCWZvciAoaW50IHByZV9zdW1fbW9kID0gMDsgcHJlX3N1bV9tb2QgPCBkOyBwcmVfc3VtX21vZCsrKSB7CgkJCQkvLyBC4buPIHF1YSBhW2ldIAoJCQkJbWF4aW1pemUoZHBbaV1bal1bcHJlX3N1bV9tb2RdLCBkcFtpIC0gMV1bal1bcHJlX3N1bV9tb2RdKTsgCgkJCQkvLyBDaOG7jW4gYVtpXQoJCQkJaWYgKGogPiAwKSBtYXhpbWl6ZShkcFtpXVtqXVsocHJlX3N1bV9tb2QgKyBhW2ldKSAlIGRdLCBkcFtpIC0gMV1baiAtIDFdW3ByZV9zdW1fbW9kXSArIGFbaV0pOyAKCQkJfQoJCX0KCX0KCglsbCBhbnMgPSBkcFtuXVtrXVswXTsgCglpZiAoYW5zIDwgMCkgYW5zID0gLTE7ICAKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9Cg==