#include <bits/stdc++.h>
using std::bitset;
using std::cin;
using std::cout;
using std::endl;
using std::make_pair;
using std::map;
using std::pair;
using std::priority_queue;
using std::queue;
using std::set;
using std::string;
using std::stringstream;
using std::vector;
class MyTimer {
 public:
  void reset() {}
  void report() {}
} myTimer;
template <typename A, typename B>
std::ostream &operator<<(std::ostream &cout, const pair<A, B> &x) {
  return cout << "(" << x.first << ", " << x.second << ")";
}
template <typename T1, typename T2>
inline bool chmin(T1 &a, const T2 &b) {
  return a > b ? a = b, true : false;
}
template <typename T1, typename T2>
inline bool chmax(T1 &a, const T2 &b) {
  return a < b ? a = b, true : false;
}
const int maxN = 100000 + 233;
long long gcd(long long x, long long y) { return y == 0 ? x : gcd(y, x % y); }
long long solve(long long n, long long k, long long l) {
  if (l == 0) l += k;
  long long prod = n * (long long)k;
  return prod / gcd(prod, l);
}
int main() {
  std::ios::sync_with_stdio(false);
  long long n, k, a, b;
  cin >> n >> k >> a >> b;
  if (a > b) std::swap(a, b);
  long long mn = maxN * (long long)maxN;
  long long mx = -1;
  for (int i = 1; i <= n; ++i) {
    long long x = solve(n, k, k - a - b + (i - 1) * k);
    long long y = solve(n, k, b - a + (i - 1) * k);
    long long z = solve(n, k, a + k - b + (i - 1) * k);
    long long w = solve(n, k, a + b + (i - 1) * k);
    chmin(mn, std::min({x, y, z, w}));
    chmax(mx, std::max({x, y, z, w}));
  }
  cout << mn << " " << mx << endl;
  return 0;
}
