#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
long long int t[MAXN];
long long int div_ceil(long long int num, long long int den) {
  return (num + den - 1) / den;
}
int main(int argc, char const *argv[]) {
  long long int n, m, a, d;
  scanf("%lld %lld %lld %lld", &n, &m, &a, &d);
  for (int i = 1; i <= m; ++i) {
    scanf("%lld", &t[i]);
  }
  long long int jmp = (d / a) + 1;
  long long int p1 = 1, p2 = 1;
  long long int ans = 0;
  while (p1 <= n || p2 <= m) {
    if (p1 <= n) {
      long long int max_jmp = div_ceil(n + 1 - p1, jmp);
      if (p2 <= m) {
        if (a * p1 < t[p2]) {
          long long int x = min(div_ceil(t[p2] - a * p1, a * jmp), max_jmp);
          ans += x;
          long long int ft = (p1 + (x - 1) * jmp) * a + d;
          while (p2 <= m && t[p2] <= ft) {
            p2++;
          }
          p1 += (x * jmp);
        } else {
          long long int ft = t[p2] + d;
          ans++;
          while (p2 <= m && t[p2] <= ft) {
            p2++;
          }
          p1 = div_ceil(ft + 1, a);
        }
      } else {
        ans += max_jmp;
        p1 = n + 1;
      }
    } else {
      long long int ft = t[p2] + d;
      ans++;
      while (p2 <= m && t[p2] <= ft) {
        p2++;
      }
    }
  }
  printf("%lld\n", ans);
  return 0;
}
