@file:Suppress("NOTHING_TO_INLINE", "EXPERIMENTAL_FEATURE_WARNING", "OVERRIDE_BY_INLINE")

import java.io.PrintWriter
import java.util.PriorityQueue
import kotlin.math.*
import kotlin.random.Random
import kotlin.collections.sort as _sort
import kotlin.collections.sortDescending as _sortDescending
import kotlin.io.println as iprintln

/** @author Spheniscine */
fun main() { _writer.solve(); _writer.flush() }
fun PrintWriter.solve() {
    val numCases = 1 //readInt()
    case@ for(case in 1..numCases) {
        //print("Case #$case: ")

        val k = readInt()
        val a = readInt()
        val b = readInt()

        val ans = b / k * k >= a
        println(if(ans) "OK" else "NG")
    }
}

tailrec fun gcd(a: Long, b: Long): Long = if(a == 0L) abs(b) else gcd(b % a, a)

inline fun bsFirst(first: Int, last: Int, predicate: (Int) -> Boolean): Int {
    var low = first
    var high = last

    while (low <= high) {
        val mid = low.and(high) + low.xor(high).shr(1)
        if(predicate(mid)) high = mid - 1
        else low = mid + 1
    }
    return low
}
inline fun IntRange.bsFirst(predicate: (Int) -> Boolean) = bsFirst(first, last, predicate)

inline fun bsLast(first: Int, last: Int, predicate: (Int) -> Boolean) = bsFirst(first, last) { !predicate(it) } - 1
inline fun IntRange.bsLast(predicate: (Int) -> Boolean) = bsLast(first, last, predicate)

inline fun <T> List<T>.bsIndexOfFirst(predicate: (T) -> Boolean) = bsFirst(0, lastIndex) { predicate(get(it)) }
inline fun <T> List<T>.bsFirst(predicate: (T) -> Boolean) = get(bsIndexOfFirst(predicate))
inline fun <T> List<T>.bsFirstOrNull(predicate: (T) -> Boolean) = getOrNull(bsIndexOfFirst(predicate))
inline fun <T> List<T>.bsIndexOfLast(predicate: (T) -> Boolean) = bsLast(0, lastIndex) { predicate(get(it)) }
inline fun <T> List<T>.bsLast(predicate: (T) -> Boolean) = get(bsIndexOfLast(predicate))
inline fun <T> List<T>.bsLastOrNull(predicate: (T) -> Boolean) = getOrNull(bsIndexOfLast(predicate))

private inline infix fun Int.rol(dist: Int) = shl(dist) or ushr(-dist)
val sipHasher = HalfSipHash()

fun fraction(num: Long, den: Long) = run {
    val g = gcd(num, den)
    Fraction(num/g, den/g)
}
data class Fraction(val num: Long, val den: Long): Comparable<Fraction> {
    override fun hashCode(): Int = sipHasher.doHash {
        acc(num)
        acc(den)
    }

    operator fun compareTo(b: Long) = num.compareTo(den * b)
    override fun compareTo(other: Fraction): Int = (num * other.den).compareTo(other.num * den)
}

interface NonNullMap<K, V: Any>: Map<K, V> {
    override fun get(key: K): V
}

interface NonNullMutableMap<K, V: Any>: MutableMap<K, V>, NonNullMap<K, V> {
    operator fun set(key: K, value: V) { put(key, value) }
}

@JvmName("defaultMutable")
fun <K, V: Any> MutableMap<K, V>.default(defaultValue: V): NonNullMutableMap<K, V> {
    val map = this
    return object : NonNullMutableMap<K, V>, MutableMap<K, V> by map {
        override fun get(key: K): V = map[key] ?: defaultValue
        override fun put(key: K, value: V): V? = if(value == defaultValue) remove(key) else map.put(key, value)
    }
}

class HalfSipHash(val k0: Int = random.nextInt(), val k1: Int = random.nextInt()) {
    private var v0 = 0
    private var v1 = 0
    private var v2 = 0
    private var v3 = 0

    fun init() {
        v0 = k0; v1 = k1; v2 = 0x6c796765 xor k0; v3 = 0x74656462 xor k1
    }

    private fun round() {
        v0 += v1; v1 = v1 rol 5; v1 = v1 xor v0; v0 = v0 rol 16; v2 += v3; v3 = v3 rol 8; v3 = v3 xor v2
        v0 += v3; v3 = v3 rol 7; v3 = v3 xor v0; v2 += v1; v1 = v1 rol 13; v1 = v1 xor v2; v2 = v2 rol 16
    }

    fun acc(m: Int) {
        v3 = v3 xor m
        round()
        v0 = v0 xor m
    }

    fun acc(m: Long) {
        acc(m.toInt())
        acc(m.shr(32).toInt())
    }

    private inline fun ByteArray.getOrFF(i: Int) = if(i < size) get(i).toInt() and 0xff else 0xff

    fun acc(input: String) {
        val bytes = input.toByteArray()
        val len = bytes.size
        for (i in 0 until len step 4) {
            val int = (bytes[i].toInt() shl 24
                    or (bytes.getOrFF(i+1) shl 16)
                    or (bytes.getOrFF(i+2) shl 8)
                    or bytes.getOrFF(i+3))
            acc(int)
        }
        comma()
    }

    fun comma() {
        v1 = v1 xor 0xff
        round()
    }

    fun finish(): Int {
        v2 = v2 xor 0xee
        round(); round(); round()
        return v1 xor v3
    }

    fun finishLong(): Long {
        v2 = v2 xor 0xee
        round(); round(); round()
        val h = v1 xor v3
        v1 = v1 xor 0xdd
        round(); round(); round()
        return h.toLong().shl(32) or (v1 xor v3).toLong().and(0xffff_ffff)
    }

    inline fun doHash(block: HalfSipHash.() -> Unit): Int {
        init()
        block()
        return finish()
    }

    fun hash(input: IntArray): Int {
        init()
        for (m in input) acc(m)
        comma()
        return finish()
    }

    fun hash(input: LongArray): Int {
        init()
        for (m in input) acc(m)
        comma()
        return finish()
    }

    fun hash(input: String): Int {
        init()
        acc(input)
        return finish()
    }
}

inline fun LongArray.sumByLong(func: (Long) -> Long) = fold(0L) { acc, t -> acc + func(t) }

/** IO */
//@JvmField val INPUT = File("input.txt").inputStream()
//@JvmField val OUTPUT = File("output.txt").outputStream()
@JvmField val INPUT = System.`in`
@JvmField val OUTPUT = System.out

@JvmField val _reader = INPUT.bufferedReader()
fun readLine(): String? = _reader.readLine()
fun readLn() = _reader.readLine()!!
@JvmField var _ln = ""
@JvmField var _lnPtr = 0
fun read(): String {
    while (_lnPtr >= _ln.length) {
        _ln = readLine() ?: return ""
        _lnPtr = 0
    }
    var j = _ln.indexOf(' ', _lnPtr)
    if(j < 0) j = _ln.length
    val res = _ln.substring(_lnPtr, j)
    _lnPtr = j + 1
    return res
}
fun readRem(): String /* reads remainder of current line */ =
    _ln.substring(min(_lnPtr, _ln.length)).also { _lnPtr = _ln.length }
fun readInt() = read().toInt()
fun readDouble() = read().toDouble()
fun readLong() = read().toLong()
fun readStrings(n: Int) = List(n) { read() }
fun readLines(n: Int) = List(n) { readLn() }
fun readInts(n: Int) = List(n) { read().toInt() }
fun readIntArray(n: Int) = IntArray(n) { read().toInt() }
fun readDoubles(n: Int) = List(n) { read().toDouble() }
fun readDoubleArray(n: Int) = DoubleArray(n) { read().toDouble() }
fun readLongs(n: Int) = List(n) { read().toLong() }
fun readLongArray(n: Int) = LongArray(n) { read().toLong() }

@JvmField val _writer = PrintWriter(OUTPUT, false)

/** shuffles and sort overrides to avoid quicksort attacks */
private inline fun <T> _shuffle(rnd: Random, get: (Int) -> T, set: (Int, T) -> Unit, size: Int) {
    // Fisher-Yates shuffle algorithm
    for (i in size - 1 downTo 1) {
        val j = rnd.nextInt(i + 1)
        val temp = get(i)
        set(i, get(j))
        set(j, temp)
    }
}

@JvmField var _random: Random? = null
val random get() = _random ?: Random(0x594E215C123 * System.nanoTime()).also { _random = it }

fun IntArray.shuffle(rnd: Random = random) = _shuffle(rnd, ::get, ::set, size)
fun IntArray.sort() { shuffle(); _sort() }
fun IntArray.sortDescending() { shuffle(); _sortDescending() }

fun LongArray.shuffle(rnd: Random = random) = _shuffle(rnd, ::get, ::set, size)
fun LongArray.sort() { shuffle(); _sort() }
fun LongArray.sortDescending() { shuffle(); _sortDescending() }

fun DoubleArray.shuffle(rnd: Random = random) = _shuffle(rnd, ::get, ::set, size)
fun DoubleArray.sort() { shuffle(); _sort() }
fun DoubleArray.sortDescending() { shuffle(); _sortDescending() }

fun CharArray.shuffle(rnd: Random = random) = _shuffle(rnd, ::get, ::set, size)
inline fun CharArray.sort() { _sort() }
inline fun CharArray.sortDescending() { _sortDescending() }

inline fun <T: Comparable<T>> Array<out T>.sort() = _sort()
inline fun <T: Comparable<T>> Array<out T>.sortDescending() = _sortDescending()
inline fun <T: Comparable<T>> MutableList<out T>.sort() = _sort()
inline fun <T: Comparable<T>> MutableList<out T>.sortDescending() = _sortDescending()

fun `please stop removing these imports IntelliJ`() { iprintln(max(1, 2)) }

/** additional commons */
inline fun <T> Iterable<T>.sumByLong(func: (T) -> Long) = fold(0L) { acc, t -> acc + func(t) }
inline fun <T> Sequence<T>.sumByLong(func: (T) -> Long) = fold(0L) { acc, t -> acc + func(t) }
inline fun <T> Array<T>.sumByLong(func: (T) -> Long) = fold(0L) { acc, t -> acc + func(t) }
fun IntArray.sumLong() = fold(0L, Long::plus)


Measured memory_bytes: 36144