Vasya has n burles. One bottle of Ber-Cola costs a burles and one Bars bar costs b burles. He can buy any non-negative integer number of bottles of Ber-Cola and any non-negative integer number of Bars bars.

Find out if it's possible to buy some amount of bottles of Ber-Cola and Bars bars and spend exactly n burles.

In other words, you should find two non-negative integers x and y such that Vasya can buy x bottles of Ber-Cola and y Bars bars and x·a + y·b = n or tell that it's impossible.

Input

First line contains single integer n (1 ≤ n ≤ 10 000 000) — amount of money, that Vasya has.

Second line contains single integer a (1 ≤ a ≤ 10 000 000) — cost of one bottle of Ber-Cola.

Third line contains single integer b (1 ≤ b ≤ 10 000 000) — cost of one Bars bar.

Output

If Vasya can't buy Bars and Ber-Cola in such a way to spend exactly n burles print «NO» (without quotes).

Otherwise in first line print «YES» (without quotes). In second line print two non-negative integers x and y — number of bottles of Ber-Cola and number of Bars bars Vasya should buy in order to spend exactly n burles, i.e. x·a + y·b = n. If there are multiple answers print any of them.

Any of numbers x and y can be equal 0.

Examples

Input

7
2
3


Output

YES
2 1


Input

100
25
10


Output

YES
0 10


Input

15
4
8


Output

NO


Input

9960594
2551
2557


Output

YES
1951 1949

Note

In first example Vasya can buy two bottles of Ber-Cola and one Bars bar. He will spend exactly 2·2 + 1·3 = 7 burles.

In second example Vasya can spend exactly n burles multiple ways: 

  * buy two bottles of Ber-Cola and five Bars bars; 
  * buy four bottles of Ber-Cola and don't buy Bars bars; 
  * don't buy Ber-Cola and buy 10 Bars bars. 



In third example it's impossible to but Ber-Cola and Bars bars in order to spend exactly n burles.
/* LA KE 3 PEG BALLIYE
*/
import java.io.PrintWriter;
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.*;

/* Built using CHelper plug-in
* Solution By SANYAM ARORA
*/
//MY CODE STARTS HERE//

public class codeforces{
    static class pair implements Comparable<pair> {
        int a, b;

        public pair(int a, int b) {
            this.a = a;
            this.b = b;
        }


        @Override
        public int compareTo(pair p) {
            return this.b - p.b;
        }
    }
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        FastReader in = new FastReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Ques solver;
        solver = new Ques();
      //int testNumber=in.nextInt();
       // while(testNumber-->0)
        solver.solve(1, in, out);
        out.close();
    }

    static class Ques {
        public void solve(int testNumber, FastReader in, PrintWriter out) {
            long n = in.nextLong();
            long a = in.nextLong();
            long b = in.nextLong();
            long y = 0;
            while (y * b < n) {
                y++;
            }
            for (long x = 0; ; x++) {
                while (y > 0 && x * a + y * b > n) {
                    y--;
                }
                if (x * a + y * b == n) {
                    out.println("YES");
                    out.println(x+" "+y);
                    return;
                }
                if (y == 0 && x * a + y * b > n) {
                    break;
                }
            }
            out.println("NO");



        }
    }
    static long c = 0;
    static void answer(long a[][],int i,int j,int n,int m){
        if(i==n&&j==m){ c=((c%M)+(a[i][j]%M))%M;
        return;
        }
        if(isCheck(i+1,j,n,m)){
            c=((c%M)+(a[i][j]%M))%M;
         //   System.out.println(c+" i"+" j "+i+" "+j);
            answer(a,i+1,j,n,m);
           }
        if(isCheck(i,j+1,n,m)){
            c=((c%M)+(a[i][j]%M))%M;
       //     System.out.println(c+" i"+" j "+i+" "+j);
            answer(a,i,j+1,n,m);
        }
    }
    static boolean isCheck(int i,int j,int n,int m){
        if(i<=0||i>n||j<=0||j>m) return false;

        return true;
    }
    static long GCD(long a, long b) { return (a%b == 0)? Math.abs(b) : GCD(b,a%b); }
    static void solveDiophantine(long a, long b, long c)
    {
        System.out.println("Attempting to solve: "+a+"x + "+b+"y = "+c);

        //special case
        if (a==0 && b==0 && c==0)
        {
            System.out.println("x and y can take any value");
            return;
        }

        long a1=Math.abs(a);
        long b1=Math.abs(b);
        long c1=0, c2=1;
        long d1=1, d2=0;

        while(b1>0)
        {
            long mult=a1/b1;
            long temp=c2;
            c2=c2*mult+c1;
            c1=temp;
            temp=d2;
            d2=d2*mult+d1;
            d1=temp;
            temp=b1;
            b1=a1%b1;
            a1=temp;
        }

        long gcd=a1;
        if (gcd==0 || Math.abs(c)%gcd!=0)
        {
            System.out.println("There are no integer solutions!");
            return;
        }

        long det=c1*d2-c2*d1;
        long signa=a>0 ? 1: -1;
        long signb=b>0 ? 1: -1;
        long x=-d1*c*det*signa/gcd;
        long y=c1*c*det*signb/gcd;
        System.out.println("One solution is x="+x+", y="+y);
        System.out.println("A general solution is x="+x+" + "+b/gcd+"t, y="+y+" - "+a/gcd+"t");
        long ans1=0,ans2=0;
        long check=Math.min(x,y);
        if(check<0){
            if(check==x){
                int i=0;
                int j=0;
                long lu=x,lu2=x;
                int k=0;
                while (true){
                    lu=x+i*(b/gcd);
                    lu2= x+j*(b/gcd);
                    if(lu2>0){k=(-1*j); break;}
                    System.out.println(lu+" "+lu2);
                    if(lu>0){k=i; break;}
                    j--;
                    i++;
                }System.out.println(lu+"----+lu2"+lu2+" "+k);
                //  int ans=Math.min(i,Math.abs(j));
                //if(ans==i){
                ans1=x+k*(b/gcd);
                ans2=y-k*(a/gcd);
                //}
                //  else if(ans==-(1*j)){
                //    ans1=x+j*(b/gcd);
                //  ans2=y-j*(a/gcd);
                // }
                System.out.println(i+"_"+j);
                System.out.println(ans1+" "+ans2);
            }
            else {System.out.println("Y<09");
                int i=0;
                int j=0;
                long lu=y,lu2=y;
                int k=0;
                while (true){
                    lu=y-i*(a/gcd);
                    lu2= y-j*(a/gcd);
                    if(lu2>0){k=(-1*j); break;}
                   System.out.println(lu+" "+lu2);
                    if(lu>0){k=i; break;}
                    j--;
                    i++;
                }System.out.println(lu+"----+lu2"+lu2+" "+k);
              //  int ans=Math.min(i,Math.abs(j));
                //if(ans==i){
                    ans1=x+k*(b/gcd);
                    ans2=y-k*(a/gcd);
                //}
              //  else if(ans==-(1*j)){
                //    ans1=x+j*(b/gcd);
                  //  ans2=y-j*(a/gcd);
               // }
                System.out.println(i+"_"+j);
               System.out.println(ans1+" "+ans2);
            }
        }

    }
    static long ncr(long n,long r){
        if(r==0 || r==n) return 1;
        double d=1;
        if(r>n) r=n-r;
        for(int i=0;i<r;i++){
            d*=(double)(n-i)/(i+1);

        }
        return (long)d;
    }
    static long d, x, y;
    static void extendedEuclid(long A, long B) {
        if(B == 0) {
            d = A;
            x = 1;
            y = 0;
        }
        else {
            extendedEuclid(B, A%B);
            long temp = x;
            x = y;
            y = temp - (A/B)*y;
        }
    }
    static long modInverse(long A, long M)
    {
        extendedEuclid(A,M);
        return (x%M+M)%M;
    }
    static long modPow(long x,long y,long M){
        if(y==0) return 1;
        if(y%2==0) return modPow((x*x)%M,y/2,M);
        else return (x*modPow((x*x)%M,(y-1)/2,M))%M;
    }
    static long M = (long) Math.pow(10,9)+7;
    static long fact(long x){
        if(x==0 || x==1) return 1;
        return ((x%M) * (fact(x-1)%M))%M;
    }
    static long power(long x,long y){
        if(y==0) return 1;
        if(y%2==0) return power((x*x)%M,y/2)%M;
        else return (x*power((x*x)%M,(y-1)/2))%M;
    }
    //MY CODE END HERE//

    static class FastReader {
        private InputStream stream;
        private byte[] buf = new byte[8192];
        private int curChar;
        private int pnumChars;
        private FastReader.SpaceCharFilter filter;

        public FastReader(InputStream stream) {
            this.stream = stream;
        }

        public int read() {
            if (pnumChars == -1) {
                throw new InputMismatchException();
            }
            if (curChar >= pnumChars) {
                curChar = 0;
                try {
                    pnumChars = stream.read(buf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }
                if (pnumChars <= 0) {
                    return -1;
                }
            }
            return buf[curChar++];
        }
        private String readLine0(){
            StringBuilder buf = new StringBuilder ();
            int c = read ();
            while (c != '\n' && c != -1){
                if (c != '\r'){
                    buf.appendCodePoint (c);
                }
                c = read ();
            }
            return buf.toString ();
        }
        public String nextLine(){
            String s = readLine0 ();
            while (s.trim ().length () == 0)
                s = readLine0 ();
            return s;
        }
        public String nextLine(boolean ignoreEmptyLines){
            if (ignoreEmptyLines){
                return nextLine ();
            }else{
                return readLine0 ();
            }
        }
        public char nextCharacter(){
            int c = read ();
            while (isSpaceChar (c))
                c = read ();
            return (char) c;
        }

        public double nextDouble(){
            int c = read ();
            while (isSpaceChar (c))
                c = read ();
            int sgn = 1;
            if (c == '-'){
                sgn = -1;
                c = read ();
            }
            double res = 0;
            while (!isSpaceChar (c) && c != '.'){
                if (c == 'e' || c == 'E'){
                    return res * Math.pow (10, nextInt ());
                }
                if (c < '0' || c > '9'){
                    throw new InputMismatchException();
                }
                res *= 10;
                res += c - '0';
                c = read ();
            }
            if (c == '.'){
                c = read ();
                double m = 1;
                while (!isSpaceChar (c)){
                    if (c == 'e' || c == 'E'){
                        return res * Math.pow (10, nextInt ());
                    }
                    if (c < '0' || c > '9'){
                        throw new InputMismatchException ();
                    }
                    m /= 10;
                    res += (c - '0') * m;
                    c = read ();
                }
            }
            return res * sgn;
        }

        public int nextInt() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            int res = 0;
            do {
                if (c == ',') {
                    c = read();
                }
                if (c < '0' || c > '9') {
                    throw new InputMismatchException();
                }
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }
        public String next() {
            return nextString();
        }
        public int[] nextIntArray(int n) {
            int a[] = new int[n];
            for (int i = 0; i < n; i++)
                a[i] = nextInt();
            return a;
        }
        public long nextLong() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            int sgn = 1;
            if (c == '-') {
                sgn = -1;
                c = read();
            }
            long res = 0;
            do {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();
                res *= 10;
                res += c - '0';
                c = read();
            } while (!isSpaceChar(c));
            return res * sgn;
        }
        public String nextString() {
            int c = read();
            while (isSpaceChar(c))
                c = read();
            StringBuilder res = new StringBuilder();
            do {
                res.appendCodePoint(c);
                c = read();
            } while (!isSpaceChar(c));
            return res.toString();
        }
        public BigInteger nextBigInteger(){
            try{
                return new BigInteger (nextString());
            } catch (NumberFormatException e){
                throw new InputMismatchException ();
            }
        }

        public boolean isSpaceChar(int c) {
            if (filter != null) {
                return filter.isSpaceChar(c);
            }
            return isWhitespace(c);
        }

        public static boolean isWhitespace(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        public interface SpaceCharFilter {
            public boolean isSpaceChar(int ch);

        }

    }
}