#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
const int debug = 0;
long long t[maxn];
long long n, m, a, d, p;
long long ans, nt;
void Update(long long x) {
  if (debug) printf("%I64d %I64d\n", nt, ans);
  if (x <= nt) return;
  if (nt >= n * a) {
    ans++;
    nt = x + d;
    return;
  }
  if ((nt + 1) % a && (nt + 1) / a == x / a) {
    ans++;
    nt = x + d;
    return;
  }
  long long as = min(n, nt / a + 1), ae = min(n, x / a);
  ans += (ae - as) / p + 1;
  nt = (as + (ae - as) / p * p) * a + d;
  if (x <= nt)
    return;
  else
    ans++, nt = x + d;
}
int main() {
  if (debug) freopen("test.in", "r", stdin);
  scanf("%I64d%I64d%I64d%I64d", &n, &m, &a, &d);
  p = d / a + 1;
  for (int i = 1; i <= m; i++) scanf("%I64d", &t[i]);
  if (t[m] < n * a) t[++m] = n * a;
  for (int i = 1; i <= m; i++) Update(t[i]);
  printf("%I64d\n", ans);
  return 0;
}
