package main

import (
	"math"
	"math/rand"
	"time"
	"os"
	"bufio"
	"fmt"
	"strconv"
	"strings"
)

var(
	sc = bufio.NewScanner(os.Stdin)
	stdin = bufio.NewReader(os.Stdin)
	mod = 1000000007
	mod9 = 1000000009
)

func init()  {
	rand.Seed(time.Now().UnixNano())
	buf := make([]byte, 0) //ここのサイズは何でもよさそう
	sc.Buffer(buf, 1000000009)
}


func main() {
	h := goint();w := goint();k := goint()
	dp := make([][]int,h+1)
	for i:=0;i<h+1;i++{
		dp[i] = make([]int,w)
	}
	dp[0][0] = 1
	ls := serch(w-1)
	for i:=0;i<h;i++{
		for j:=0;j<w;j++{
			for _,v := range ls {
				if j - 1 < 0 && j == w-1{
					dp[i+1][j] += dp[i][j]
					dp[i+1][j] %= mod
				} else if j - 1 < 0{
					if v[j] == 0{
						dp[i+1][j] += dp[i][j]
						dp[i+1][j] %= mod
					} else {
						dp[i+1][j+1] += dp[i][j]
						dp[i+1][j+1] %= mod
					}
				} else if j == w-1 {
					if v[j-1] == 0{
						dp[i+1][j] += dp[i][j]
						dp[i+1][j] %= mod
					} else {
						dp[i+1][j-1] += dp[i][j]
						dp[i+1][j-1] %= mod
					}
				} else {
					if v[j-1] == 1{
						dp[i+1][j-1] += dp[i][j]
						dp[i+1][j-1] %= mod
					} else if v[j] == 1{
						dp[i+1][j+1] += dp[i][j]
						dp[i+1][j+1] %= mod
					} else {
						dp[i+1][j] += dp[i][j]
						dp[i+1][j] %= mod
					}
				}
			}
		}
	}
	fmt.Println(dp[h][k-1])
}

//横棒の配置を全探索する関数
func serch(w int) [][]int {
	var ls [][]int
	for i:=uint(0);i<uint(math.Pow(float64(2),float64(w)));i++{
		n := uint(1)
		c := make([]int,w)
		check := false
		for j:=0;j<w;j++{
			if i & n != uint(0){
				c[j] = 1
				if j >= 1{
					if  c[j] == c[j-1] {
						check = true
						break
					}
				}
			}
			n <<= 1
		}
		if check{continue}
		ls = append(ls,c)
	}
	return ls
}

//||||||||||||||||||||||||||入力|||||||||||||||||||||||||||||||||||||||\
//数字一文字入力
func nextInt() int {
	sc.Scan()
	i, e := strconv.Atoi(sc.Text())
	if e != nil {
		panic(e)
	}
	return i
}

//文字列を一行入力
func nextLine() string {
	sc.Scan()
	return sc.Text()
}

//空白区切りの文字列の入力
func spaceLine() []string {
	sc.Scan()
	return strings.Split(sc.Text()," ")
}

//数字を一行入力
func intLine() []int {
	str := spaceLine()
	buf := make([]int,len(str))
	for i,s:=range str{
		buf[i],_ = strconv.Atoi(s)
	}
	return buf
}

//次のスペースか改行まで読み込む
func gostring() string {
	byte_ls := make([]byte,0)
	for  {
		b, _ := stdin.ReadByte()
		if b == 32 || b == 10 || b == 0{
			return string(byte_ls)
		} else if b == 13 {
			continue
		} else {
			byte_ls = append(byte_ls,b)
		}
	}
}

//上の関数のintバージョン
func goint() int {
	n,_ := strconv.Atoi(gostring())
	return n
}

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

//ソートする
//sは最初のインデックス fは最後のインデックス
func Sort(ls []int,l int,r int)  {
	if r - l <= 0{return}
	pipot := l + rand.Intn(r-l+1)
	ls[r],ls[pipot] = ls[pipot],ls[r]
	i := l
	for j:=l;j<r;j++{
		if ls[j] < ls[r]{
			ls[i],ls[j] = ls[j],ls[i]
			i ++
		}
	}
	ls[i],ls[r] = ls[r],ls[i]
	Sort(ls,l,i-1)
	Sort(ls,i+1,r)
}

//配列の大小を指定した要素で比較
//a < bならtrue
func sizeCheck(a []int,b []int,ls []int) bool {
	for _,i:= range ls{
		if a[i] < b[i]{
			return true
		} else if a[i] > b[i] {
			return false
		}
	}
	return false
}

//二次元配列のソート
func Sort2D(ls [][]int,l int,r int,index ...int)  {
	if r - l <= 0{return}
	pipot := l + rand.Intn(r-l+1)
	ls[r],ls[pipot] = ls[pipot],ls[r]
	i := l
	for j:=l;j<r;j++{
		if sizeCheck(ls[j],ls[r],index){
			ls[i],ls[j] = ls[j],ls[i]
			i ++
		}
	}
	ls[i],ls[r] = ls[r],ls[i]
	Sort2D(ls,l,i-1,index ...)
	Sort2D(ls,i+1,r,index ...)
}

func sum(a ...int) int {
	ans := 0
	for i:=0;i<len(a);i++{
		ans += a[i]
	}
	return ans
}

func min(a ...int) int {
	ans := a[0]
	for i:=1;i<len(a);i++{
		if ans > a[i]{
			ans = a[i]
		}
	}
	return ans
}

func abs(n int) int {
	if n >= 0{
		return n
	} else {
		return -n
	}
}

//素因数分解
func factorization(n int) [][]int {
	prime := make([][]int,0)
	for i:=2;i*i-1<=n;i++{
		count := 0
		for ;n % i == 0;{
			count ++
			n /= i
		}
		if count != 0{
			prime = append(prime,[]int{i,count})
		}
	}
	if n != 1{
		prime = append(prime,[]int{n,1})
	}
	return prime
}

//階乗
func factorial(n,p int) int {
	a := 1
	for i:=2;i<n+1;i++{
		a = (a * i) % p
	}
	return a
}

//割り算a/b mod p
func extendedeuclidean(a,b,x,y int) (int,int,int) {
	if b == 0{
		x = 1;y = 0
		return a,x,y
	}
	d,y,x := extendedeuclidean(b,a%b,y,x)
	y -= a/b * x
	return d,x,y
}
func divmod(a,b,p int) int {
	var x,y = 0,0
	_,x,y= extendedeuclidean(b,p,x,y)
	return (p + ((x * a) % p)) % p
}

Measured memory_bytes: 640