H, W, K = [int(x) for x in input().split()]

div = 1000000007





def baai(L):

    if L == []:

        return 1

    elif L == [0]:

        return 2

    elif L == [1]:

        return 1

    elif L == [0, 0]:

        return 3

    elif len(L) == 2:

        return 1



    if L[0:2] == [1, 0]:

        return baai(L[2:])

    elif L[0:2] == [0, 1]:

        return baai(L[1:])

    elif L[0:2] == [0, 0]:

        return baai(L[2:])+baai(L[1:])

    else:

        print(("hoge", L))

        return 0





ans = [0]*(H+1)                       # 高さnに対するあみだくじ本数

dp = [[0]*W for _ in range(H)]





for i in range(H):

    for j in range(W):

        # print(i, j)

        if j-1 > i:

            break

        elif i == 0:

            if j == 0:

                dp[i][j] = baai([0]*(W-2))

            else:

                buf = [0] * (W-1)

                buf[0] = 1

                dp[i][j] = baai(buf)

            dp[i][j] = dp[i][j] % div

            continue



        buf = [0]*W

        buf[j] = 1

        dp[i][j] += dp[i-1][j]*baai(buf)

        if j-1 >= 0:

            buf = [0]*(W-1)

            buf[j-1] = 1

            dp[i][j] += dp[i-1][j-1]*baai(buf)

        if j+1 < W:

            buf = [0]*(W-1)

            buf[j] = 1

            dp[i][j] += dp[i-1][j+1]*baai(buf)

        dp[i][j] = dp[i][j] % div



print((dp[H-1][K-1]))

#!/usr/bin/env python3

import sys

import functools

INF = float("inf")



MOD = 1000000007  # type: int





@functools.lru_cache(maxsize=None)

def f(x):

    if x <= 0:

        return 1

    elif x == 1:

        return 2

    else:

        return f(x-1) + f(x-2)





def solve(H: int, W: int, K: int):



    dp = [0]*(W+2)

    dp[1] = 1                   # スタート地点

    for h in range(H):

        buf = [0]*(W+2)

        for i in range(1, W+1):

            # 左からくる奴

            buf[i] += dp[i-1]*f(i-3)*f(W-i-1)

            buf[i] %= MOD

            # 真上から来る奴

            buf[i] += dp[i]*f(i-2)*f(W-i-1)

            buf[i] %= MOD

            # 右から来る奴

            buf[i] += dp[i+1]*f(i-2)*f(W-i-2)

            buf[i] %= MOD

        for i in range(1, W+1):

            dp[i] = buf[i]

    print((dp[K]))



    return





def main():



    def iterate_tokens():

        for line in sys.stdin:

            for word in line.split():

                yield word

    tokens = iterate_tokens()

    H = int(next(tokens))  # type: int

    W = int(next(tokens))  # type: int

    K = int(next(tokens))  # type: int

    solve(H, W, K)





if __name__ == '__main__':

    main()

H, W, K = [int(x) for x in input().split()]
div = 1000000007


def baai(L):
    if L == []:
        return 1
    elif L == [0]:
        return 2
    elif L == [1]:
        return 1
    elif L == [0, 0]:
        return 3
    elif len(L) == 2:
        return 1
    if L[0:2] == [1, 0]:
        return baai(L[2:])
    elif L[0:2] == [0, 1]:
        return baai(L[1:])
    elif L[0:2] == [0, 0]:
        return baai(L[2:]) + baai(L[1:])
    else:
        print(("hoge", L))
        return 0


ans = [0] * (H + 1)  # 高さnに対するあみだくじ本数
dp = [[0] * W for _ in range(H)]
for i in range(H):
    for j in range(W):
        # print(i, j)
        if j - 1 > i:
            break
        elif i == 0:
            if j == 0:
                dp[i][j] = baai([0] * (W - 2))
            else:
                buf = [0] * (W - 1)
                buf[0] = 1
                dp[i][j] = baai(buf)
            dp[i][j] = dp[i][j] % div
            continue
        buf = [0] * W
        buf[j] = 1
        dp[i][j] += dp[i - 1][j] * baai(buf)
        if j - 1 >= 0:
            buf = [0] * (W - 1)
            buf[j - 1] = 1
            dp[i][j] += dp[i - 1][j - 1] * baai(buf)
        if j + 1 < W:
            buf = [0] * (W - 1)
            buf[j] = 1
            dp[i][j] += dp[i - 1][j + 1] * baai(buf)
        dp[i][j] = dp[i][j] % div
print((dp[H - 1][K - 1]))

#!/usr/bin/env python3
import sys
import functools

INF = float("inf")
MOD = 1000000007  # type: int


@functools.lru_cache(maxsize=None)
def f(x):
    if x <= 0:
        return 1
    elif x == 1:
        return 2
    else:
        return f(x - 1) + f(x - 2)


def solve(H: int, W: int, K: int):
    dp = [0] * (W + 2)
    dp[1] = 1  # スタート地点
    for h in range(H):
        buf = [0] * (W + 2)
        for i in range(1, W + 1):
            # 左からくる奴
            buf[i] += dp[i - 1] * f(i - 3) * f(W - i - 1)
            buf[i] %= MOD
            # 真上から来る奴
            buf[i] += dp[i] * f(i - 2) * f(W - i - 1)
            buf[i] %= MOD
            # 右から来る奴
            buf[i] += dp[i + 1] * f(i - 2) * f(W - i - 2)
            buf[i] %= MOD
        for i in range(1, W + 1):
            dp[i] = buf[i]
    print((dp[K]))
    return


def main():
    def iterate_tokens():
        for line in sys.stdin:
            for word in line.split():
                yield word

    tokens = iterate_tokens()
    H = int(next(tokens))  # type: int
    W = int(next(tokens))  # type: int
    K = int(next(tokens))  # type: int
    solve(H, W, K)


if __name__ == "__main__":
    main()

-H, W, K = [int(x) for x in input().split()] -div = 1000000007 +#!/usr/bin/env python3 +import sys +import functools + +INF = float("inf") +MOD = 1000000007  # type: int -def baai(L): -    if L == []: +@functools.lru_cache(maxsize=None) +def f(x): +    if x <= 0: -    elif L == [0]: +    elif x == 1: -    elif L == [1]: -        return 1 -    elif L == [0, 0]: -        return 3 -    elif len(L) == 2: -        return 1 -    if L[0:2] == [1, 0]: -        return baai(L[2:]) -    elif L[0:2] == [0, 1]: -        return baai(L[1:]) -    elif L[0:2] == [0, 0]: -        return baai(L[2:]) + baai(L[1:]) -        print(("hoge", L)) -        return 0 +        return f(x - 1) + f(x - 2) -ans = [0] * (H + 1)  # 高さnに対するあみだくじ本数 -dp = [[0] * W for _ in range(H)] -for i in range(H): -    for j in range(W): -        # print(i, j) -        if j - 1 > i: -            break -        elif i == 0: -            if j == 0: -                dp[i][j] = baai([0] * (W - 2)) -            else: -                buf = [0] * (W - 1) -                buf[0] = 1 -                dp[i][j] = baai(buf) -            dp[i][j] = dp[i][j] % div -            continue -        buf = [0] * W -        buf[j] = 1 -        dp[i][j] += dp[i - 1][j] * baai(buf) -        if j - 1 >= 0: -            buf = [0] * (W - 1) -            buf[j - 1] = 1 -            dp[i][j] += dp[i - 1][j - 1] * baai(buf) -        if j + 1 < W: -            buf = [0] * (W - 1) -            buf[j] = 1 -            dp[i][j] += dp[i - 1][j + 1] * baai(buf) -        dp[i][j] = dp[i][j] % div -print((dp[H - 1][K - 1])) +def solve(H: int, W: int, K: int): +    dp = [0] * (W + 2) +    dp[1] = 1  # スタート地点 +    for h in range(H): +        buf = [0] * (W + 2) +        for i in range(1, W + 1): +            # 左からくる奴 +            buf[i] += dp[i - 1] * f(i - 3) * f(W - i - 1) +            buf[i] %= MOD +            # 真上から来る奴 +            buf[i] += dp[i] * f(i - 2) * f(W - i - 1) +            buf[i] %= MOD +            # 右から来る奴 +            buf[i] += dp[i + 1] * f(i - 2) * f(W - i - 2) +            buf[i] %= MOD +        for i in range(1, W + 1): +            dp[i] = buf[i] +    print((dp[K])) +    return + + +def main(): +    def iterate_tokens(): +        for line in sys.stdin: +            for word in line.split(): +                yield word + +    tokens = iterate_tokens() +    H = int(next(tokens))  # type: int +    W = int(next(tokens))  # type: int +    K = int(next(tokens))  # type: int +    solve(H, W, K) + + +if __name__ == "__main__": +    main()