#include <bits/stdc++.h>
using namespace std;
const long long OO = (long long)1e18 + 9;
const int oo = 2147483647;
const double EPS = 1e-9;
const double PI = acos(-1.0);
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
int dX[] = {1, 0, -1, 0, 1, -1, 1, -1};
int dY[] = {0, 1, 0, -1, 1, 1, -1, -1};
char letters[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                  'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
                  's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
int dot(int x, int y, int x2, int y2) { return x * x2 + y * y2; }
long long gcd(long long x, long long y) { return !y ? x : gcd(y, x % y); }
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
int ord(int r, int c, int nCol) { return (nCol * r) + c + 1; }
int cmpDouble(long double d1, long double d2) {
  return fabs(d1 - d2) <= EPS ? 0 : d1 > d2 ? 1 : -1;
}
bool isPrime(long long num) {
  if (num == 2) return true;
  if (num < 2 || !(num % 2)) return false;
  for (int i = 3; i * i <= num; i++)
    if (!(num % i)) return false;
  return true;
}
long long _sieve_size, cnt = 0;
bitset<10000010> bs;
long long sieve(long long upperbound) {
  _sieve_size = upperbound + 1;
  bs.set();
  bs[0] = bs[1] = 0;
  for (long long i = 2; i <= _sieve_size; i++)
    if (bs[i]) {
      for (long long j = i * i; j <= _sieve_size; j += i) bs[j] = 0;
      cnt++;
      if (cnt == 10001) return i;
    }
  return 0;
}
int main() {
  long long n, a, b;
  cin >> n >> a >> b;
  for (long long i = 0; i <= n; i++) {
    if (i * a > n) break;
    if (!((n - (i * a)) % b)) {
      cout << "YES\n" << i << ' ' << (n - (i * a)) / b << endl;
      return 0;
    }
  }
  cout << "NO";
  return 0;
}
