#include using namespace std; void chmax(int& x, const int y) { x = max(x, y); } #define rep(i, x) for(int i = 0; i < (x); i++) using T = tuple; int n, K, x, y, res; int main() { cin >> n >> K >> x >> y; x %= K, y %= K; vector a(n, 0); vector dp(vector(K, vector(K, -1))); vector dp2(vector(K, -1)); for(auto& v : a) cin >> v, v %= K; dp[x][y] = 0; dp2[x] = dp2[y] = 0; rep(i, n) { queue upd; rep(j, K) { for(int sum = 0; sum <= 2 * K; sum += K) { int k = sum - j - a[i]; if(!(clamp(k, 0, K - 1) == k)) continue; auto& now = dp[j][k]; if(now == -1) continue; upd.emplace(j, k, now + 1); upd.emplace(a[i], j, now + 1); upd.emplace(a[i], k, now + 1); } upd.emplace(j, a[i], dp2[j]); } while(!upd.empty()) { auto [j, k, val] = upd.front(); upd.pop(); chmax(dp[j][k], val); chmax(dp[k][j], val); chmax(dp2[j], val); chmax(dp2[k], val); } } rep(i, K) chmax(res, *max_element(dp[i].begin(), dp[i].end())); cout << res << '\n'; return 0; }