#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>
bool maximize(T& a, const T& b) {
if (b < a) return false;
a = b;
return true;
}
int n, k, d;
int a[N];
long long 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 thằng, tổng mod d = sum_mod
// dp[n][k][0] = tổng lớn nhất thoả mãn điều kiện
int main() {
ios::sync_with_stdio(0); cin.tie(0);
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 = 0; i < n; i++) {
for (int j = 0; j <= k; j++) {
for (int sum_mod = 0; sum_mod < d; sum_mod++) {
if (dp[i][j][sum_mod] == -LINF) continue;
// xét thằng i + 1
// không chọn
maximize(dp[i + 1][j][sum_mod], dp[i][j][sum_mod]);
// chọn
maximize(dp[i + 1][j + 1][(sum_mod + a[i + 1]) % d], dp[i][j][sum_mod] + a[i + 1]);
}
}
}
long long ans = dp[n][k][0];
if (ans == -LINF) ans = -1;
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDFlMiArIDU7IApjb25zdCBpbnQgSyA9IDFlMiArIDU7IApjb25zdCBpbnQgRCA9IDFlMiArIDU7IAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYm9vbCBtYXhpbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIHJldHVybiBmYWxzZTsgCglhID0gYjsgCglyZXR1cm4gdHJ1ZTsgCn0KCmludCBuLCBrLCBkOyAgCmludCBhW05dOwpsb25nIGxvbmcgZHBbTl1bS11bRF07IC8vIGRwW2ldW2pdW3N1bV9tb2RdID0gdOG7lW5nIGzhu5tuIG5o4bqldCAKCQkJCSAvLwlraGkgeMOpdCDEkeG6v24gcGjhuqduIHThu60gdGjhu6kgaSwgxJHDoyBjaOG7jW4gaiB0aOG6sW5nLCB04buVbmcgbW9kIGQgPSBzdW1fbW9kCgovLyBkcFtuXVtrXVswXSA9IHThu5VuZyBs4bubbiBuaOG6pXQgdGhv4bqjIG3Do24gxJFp4buBdSBraeG7h24gCgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG4gPj4gayA+PiBkOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07ICAKCglmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8PSBrOyBqKyspIHsKCQkJZm9yIChpbnQgc3VtX21vZCA9IDA7IHN1bV9tb2QgPCBkOyBzdW1fbW9kKyspIHsKCQkJCWRwW2ldW2pdW3N1bV9tb2RdID0gLUxJTkY7IAoJCQl9CgkJfQoJfQoKCWRwWzBdWzBdWzBdID0gMDsgCgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8PSBrOyBqKyspIHsKCQkJZm9yIChpbnQgc3VtX21vZCA9IDA7IHN1bV9tb2QgPCBkOyBzdW1fbW9kKyspIHsKCQkJCWlmIChkcFtpXVtqXVtzdW1fbW9kXSA9PSAtTElORikgY29udGludWU7ICAKCQkJCS8vIHjDqXQgdGjhurFuZyBpICsgMQoJCQkJLy8ga2jDtG5nIGNo4buNbiAKCQkJCW1heGltaXplKGRwW2kgKyAxXVtqXVtzdW1fbW9kXSwgZHBbaV1bal1bc3VtX21vZF0pOyAKCQkJCS8vIGNo4buNbiAKCQkJCW1heGltaXplKGRwW2kgKyAxXVtqICsgMV1bKHN1bV9tb2QgKyBhW2kgKyAxXSkgJSBkXSwgZHBbaV1bal1bc3VtX21vZF0gKyBhW2kgKyAxXSk7IAoJCQl9CgkJfQoJfQoKCWxvbmcgbG9uZyBhbnMgPSBkcFtuXVtrXVswXTsgCglpZiAoYW5zID09IC1MSU5GKSBhbnMgPSAtMTsgIAoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0K