#include <bits/stdc++.h>
using namespace std;
struct P {
  int x, y, z;
  bool operator<(const P &a) const { return max(x, -x) > max(a.x, -a.x); }
};
vector<int> v;
int i, n, d, m, k, a, b, c, e;
int o[1];
int l[1];
int j[1];
int dx[10] = {0, 1, 0, -1, 1, 1, -1, -1}, dy[10] = {1, 0, -1, 0, 1, -1, 1, -1},
    dz[10] = {0, 0, 0, 0, 1, -1};
int px[10] = {-1, 1, 1, -1, 1, 1, -1, -1},
    py[10] = {1, 1, -1, -1, 1, -1, 1, -1};
long long mod = 1000000007, mod2 = 1000000009, mod3 = 2017;
long long x, z, y;
double pi = 3.14159265;
P u[11];
stack<int> s;
queue<int> q;
char r[1];
bool as(P a, P b) { return a.y < b.y; }
long long g(long long x, long long y) {
  if (x < y) swap(x, y);
  for (; y;) {
    long long h = x;
    x = y;
    y = h % y;
  }
  return x;
}
int main() {
  scanf("%d %d %d %d", &a, &b, &c, &d);
  y = 987654321987654321;
  k = c + d;
  for (long long h = k; h <= (long long)a * b; h += b)
    if (h > 0)
      x = max(x, (long long)a * b / g(h, (long long)a * b)),
      y = min(y, (long long)a * b / g(h, (long long)a * b));
  k = c + (b - d);
  for (long long h = k; h <= (long long)a * b; h += b)
    x = max(x, (long long)a * b / g(h, (long long)a * b)),
    y = min(y, (long long)a * b / g(h, (long long)a * b));
  k = (b - c) + d;
  for (long long h = k; h <= (long long)a * b; h += b)
    x = max(x, (long long)a * b / g(h, (long long)a * b)),
    y = min(y, (long long)a * b / g(h, (long long)a * b));
  k = b - c - d;
  for (long long h = k; h <= (long long)a * b; h += b)
    if (h > 0)
      x = max(x, (long long)a * b / g(h, (long long)a * b)),
      y = min(y, (long long)a * b / g(h, (long long)a * b));
  printf("%lld %lld", y, x);
}
