#include <bits/stdc++.h>
static const auto INF = std::numeric_limits<int>::max();
bool check_default(int x, int l, const std::set<int>& marks) {
  for (auto p : marks) {
    if (marks.count(p + x)) {
      return true;
    }
    if (marks.count(p - x)) {
      return true;
    }
  }
  return false;
}
bool check(int p, int y, int l, const std::set<int>& marks) {
  if (p < 1 || p > l) {
    return false;
  }
  return marks.count(p - y) || marks.count(p + y);
}
int main() {
  int n, l, x, y;
  std::cin >> n >> l >> x >> y;
  std::set<int> marks;
  for (int i = 0; i < n; ++i) {
    int a;
    std::cin >> a;
    marks.insert(a);
  }
  auto xok = check_default(x, l, marks);
  auto yok = check_default(y, l, marks);
  std::vector<int> ans;
  if (!xok && !yok) {
    for (auto p : marks) {
      if (check(p + x, y, l, marks)) {
        ans.push_back(p + x);
        break;
      }
      if (check(p - x, y, l, marks)) {
        ans.push_back(p - x);
        break;
      }
    }
    if (ans.empty()) {
      ans.push_back(x);
      ans.push_back(y);
    }
  } else if (xok && !yok) {
    ans.push_back(y);
  } else if (!xok && yok) {
    ans.push_back(x);
  }
  std::cout << ans.size() << std::endl;
  if (!ans.empty()) {
    std::copy(std::begin(ans), std::end(ans),
              std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
  }
}
