Little Petya loves playing with squares. Mum bought him a square 2n × 2n in size. Petya marked a cell inside the square and now he is solving the following task.

The task is to draw a broken line that would go along the grid lines and that would cut the square into two equal parts. The cutting line should not have any common points with the marked cell and the resulting two parts should be equal up to rotation.

Petya wants to determine whether it is possible to cut the square in the required manner given the sizes of the square side and the coordinates of the marked cell. Help him.

Input

The first line contains three space-separated integers 2n, x and y (2 ≤ 2n ≤ 100, 1 ≤ x, y ≤ 2n), representing the length of a square's side and the coordinates of the marked cell. It is guaranteed that 2n is even.

The coordinates of the marked cell are represented by a pair of numbers x y, where x represents the number of the row and y represents the number of the column. The rows and columns are numbered by consecutive integers from 1 to 2n. The rows are numbered from top to bottom and the columns are numbered from the left to the right.

Output

If the square is possible to cut, print "YES", otherwise print "NO" (without the quotes).

Examples

Input

4 1 1


Output

YES


Input

2 2 2


Output

NO

Note

A sample test from the statement and one of the possible ways of cutting the square are shown in the picture: 

<image>
import java.util.*;
import java.io.*;

public class Main {

    static PrintWriter out;
    static FastReader fr;
    // make it false if Multiple test case is not in the question
    static boolean multipleTC = false;
    static int TestCase = 1;
    static int MOD = (int) 1e9 + 7;

    // for pre processing if needed
    void pre() throws Exception {
    }

    public static void main(String[] args) throws Exception {

        new Main().run();
    }

    // input output handled here
    private Object solve() throws Exception {
        // code
        int n = fr.ni();
        int x = fr.ni();
        int y = fr.ni();
        if ((x == n / 2 || x == n / 2 + 1) && (y == n / 2 || y == n / 2 + 1))
            return "NO";
        return "YES";
    }

    void run() throws Exception {
        // long start_time = System.nanoTime();

        try {
            fr = new FastReader("in0.txt");
            out = new PrintWriter("out0.txt");
        } catch (Exception e) {
            fr = new FastReader();
            out = new PrintWriter(System.out);
        }
        pre();

        int T = (multipleTC) ? fr.ni() : 1;
        for (int t = 1; t <= T; t++) {
            TestCase = t;
            p(solve());
        }

        // long end_time = System.nanoTime();
        // System.out.printf("Running Time in sec : %2.10f", (double) (end_time -
        // start_time) * (double) 1e-9);

        out.flush();
        out.close();
    }

    static void p(Object o) {
        out.print(o);
    }

    static void pln(Object o) {
        out.println(o);
    }

    static void psp(Object o) {
        out.print(o + " ");
    }

    static void pnf(Object o) {
        out.println(o);
        out.flush();
    }

    static void deb(Object... x) {
        System.out.print("#" + TestCase + " = ");
        for (int i = 0; i < x.length - 1; i++)
            System.out.print(x[i] + " , ");
        System.out.println(x[x.length - 1]);

    }

    static void in(int a) throws Exception {
        a = fr.ni();
    }

    static void in(long a) throws Exception {
        a = fr.ni();
    }

    static void in(String[] a) throws Exception {
        a = fr.nln().trim().split(" ");
    }

    static void in(String a) throws Exception {
        a = fr.next();
    }

    static void in(int a[]) throws Exception {
        for (int i = 0; i < a.length; i++) {
            a[i] = fr.ni();
        }
    }

    static void in(long a[]) throws Exception {
        for (int i = 0; i < a.length; i++) {
            a[i] = fr.nl();
        }
    }

    static void in(int a[][]) throws Exception {
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[0].length; j++) {
                a[i][j] = fr.ni();
            }
        }
    }

    class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        public FastReader(String s) throws Exception {
            br = new BufferedReader(new FileReader(s));
        }

        String next() throws Exception {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    throw new Exception(e.toString());
                }
            }
            return st.nextToken();
        }

        String nextLine() throws Exception {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                throw new Exception(e.toString());
            }
            return str;
        }

        String n() throws Exception {
            return fr.next();
        }

        String nln() throws Exception {
            return fr.nextLine().trim();
        }

        int ni() throws Exception {
            return Integer.parseInt(fr.next());
        }

        long nl() throws Exception {
            return Long.parseLong(fr.next());
        }

        double nd() throws Exception {
            return Double.parseDouble(fr.next());
        }

        int[] nextIntArray(int n) throws Exception {
            int[] a = new int[n];
            for (int i = 0; i < n; i++) {
                a[i] = fr.ni();
            }
            return a;
        }

        long[] nextLongArray(int n) throws Exception {
            long[] a = new long[n];
            for (int i = 0; i < n; i++) {
                a[i] = fr.nl();
            }
            return a;
        }
    }
}