
object Main extends App {

  import scala.io.StdIn._

  val mod = 1000000007L

  val Array(h, w, k) = readLine.trim.split(' ').map(_.toInt)

  implicit val fibonacci = Array.tabulate(w + 3){_ ⇒ 1L}
  fibonacci(1) = 2L
  for (i ← 2 until w){
    fibonacci(i) = (fibonacci(i - 2) + fibonacci(i - 1)) % mod
  }
  println(
    search(h, w, k)
  )
  implicit class ScopeFunc[T](val value: T) {
    def let[A](func: T ⇒ A): A = func(value)
    def also(func: T ⇒ Unit): T = {
      func(value)
      value
    }
  }

  def calUseHorizontal(w: Int, pos: Int)(implicit fibonacci: Array[Long]): Long = {
    w match {
      case _ if !(1 until w).contains(pos) ⇒ 0L
      case 2 ⇒ 1L
      case _ if pos == 1 || pos == w - 1 ⇒ fibonacci(w - 3)
      case _ ⇒ (fibonacci(pos - 1) * fibonacci(w - 1 - (pos + 1))) % mod
    }
  }
  def calNotMoveVertical(w: Int, pos: Int)(implicit fibonacci: Array[Long]): Long = {
    w match {
      case _ if !(1 to w).contains(pos) ⇒ 0L
      case 1 ⇒ 1L
      case _ if pos == 1 || pos == w ⇒ fibonacci(w - 2)
      case _ ⇒ (fibonacci(pos - 1) * fibonacci(w - 1 - pos)) % mod
    }
  }
  def search(h: Int, w: Int, k: Int)(implicit memo: Array[Array[Option[Long]]] = Array.tabulate(h + 1){_ ⇒ Array.tabulate(w + 1){_ ⇒ None: Option[Long]}}): Long = {
    if (h == 0 && k == 1) 1L
    else if (h == 0) 0L
    else if (!(1 to w).contains(k)) 0L
    else {
      memo(h)(k) match {
        case Some(r) ⇒ r
        case None ⇒ {
          (search(h - 1, w, k + 1) * calUseHorizontal(w, k) % mod + search(h - 1, w, k - 1) * calUseHorizontal(w, k - 1) % mod + search(h - 1, w, k) * calNotMoveVertical(w, k) % mod).let{_ % mod}.also{it ⇒
            memo(h)(k) = Some(it)
          }
        }
      }
    }
  }
}