#include <bits/stdc++.h>
using namespace std;
long long n, m, a, d, t[100100], ans, x, now;
inline long long Up(long long x, long long y) { return x / y + (x % y != 0); }
inline long long Calc(long long x, long long y) {
  x = Up(x, a) * a;
  y = min(y, n * a);
  if (y < x) return 0;
  return Up(y - x + 1, a);
}
int main() {
  scanf("%lld%lld%lld%lld", &n, &m, &a, &d);
  d++;
  for (int i = 1; i <= m; i++) scanf("%lld", &t[i]);
  sort(t + 1, t + m + 1);
  if (t[m] < n * a) t[m + 1] = n * a;
  x = Up(d, a);
  if (a < t[1]) {
    long long num = Calc(a, t[1] - 1);
    ans += Up(num, x);
    if (num) {
      now = a + (num / x) * x * a + d - 1;
      if (num % x == 0) now -= x * a;
    }
  }
  for (int i = 1; i <= m; i++) {
    now = max(now, t[i] - 1);
    if (now < t[i]) now += d, ans++;
    if (now < t[i + 1] - 1) {
      long long num = Calc(now + 1, t[i + 1] - 1);
      ans += Up(num, x);
      if (num) {
        now = Up(now + 1, a) * a + (num / x) * x * a + d - 1;
        if (num % x == 0) now -= x * a;
      }
    }
  }
  if (now < t[m + 1]) ans++;
  printf("%lld\n", ans);
}
