#include <bits/stdc++.h>
using namespace std;
long long a[100050];
map<long long, bool> ma;
long long n, l, x, y;
int main() {
  while (scanf("%I64d %I64d %I64d %I64d", &n, &l, &x, &y) == 4) {
    ma.clear();
    if (x > y) {
      int tmp = x;
      x = y;
      y = tmp;
    }
    memset(a, 0, sizeof(a));
    for (int i = 1; i <= n; i++) {
      scanf("%I64d", &a[i]);
      ma[a[i]] = 1;
    }
    int flag1 = 0, flag2 = 0;
    for (int i = 1; i <= n; i++) {
      if (ma[a[i] + x] == 1) flag1 = 1;
    }
    for (int i = 1; i <= n; i++) {
      if (ma[a[i] + y] == 1) flag2 = 1;
    }
    if (flag1 && flag2)
      puts("0");
    else if (flag1 == 0 && flag2 == 0) {
      int flag = 0;
      for (int i = 1; i <= n; i++) {
        if (ma[a[i] + x - y]) {
          if (a[i] - y >= 0) {
            puts("1");
            printf("%I64d\n", a[i] - y);
            flag = 1;
            break;
          } else if (a[i] + x <= l) {
            puts("1");
            printf("%I64d\n", a[i] + x);
            flag = 1;
            break;
          }
        }
        if (ma[a[i] + y - x]) {
          if (a[i] - x >= 0) {
            puts("1");
            printf("%I64d\n", a[i] - x);
            flag = 1;
            break;
          } else if (a[i] + y <= l) {
            puts("1");
            printf("%I64d\n", a[i] + y);
            flag = 1;
            break;
          }
        }
        if (ma[a[i] + x + y]) {
          puts("1");
          printf("%I64d\n", a[i] + x);
          flag = 1;
          break;
        }
        if (ma[a[i] - x - y]) {
          puts("1");
          printf("%I64d\n", a[i] - y);
          flag = 1;
          break;
        }
      }
      if (!flag) {
        puts("2");
        printf("%I64d %I64d\n", x, y);
      }
    } else {
      puts("1");
      if (flag1)
        printf("%I64d\n", y);
      else
        printf("%I64d\n", x);
    }
  }
}
