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



if W == 1:

    print((1))

else:

    def fib(j):

        if j == 0 or j == 1:

            return 1

        else:

            count = 0

            for num in range(2 ** (j - 1)):

                bit = str(bin(num))

                flag = 1

                for i in range(2, len(bit) - 1):

                    if bit[i] == '1' and bit[i + 1] == '1':

                        flag = 0

                count += flag

            return count

    dp = [[1] + [0] * (W - 1)]

    for j in range(1, H + 1):

        dp.append([0] * W)

        for i in range(W):

            if i == 0:

                dp[j][i] = (dp[j - 1][i] * fib(i) * fib(W - i - 1) + dp[j - 1][i + 1] * fib(i) * fib(W - i - 2)) % 1000000007

            elif i == W - 1:

                dp[j][i] = (dp[j - 1][i] * fib(i) * fib(W - i - 1) + dp[j - 1][i - 1] * fib(i - 1) * fib(W - i - 1)) % 1000000007

            else:

                dp[j][i] = (dp[j - 1][i] * fib(i) * fib(W - i - 1) + dp[j - 1][i + 1] * fib(i) * fib(W - i - 2) + dp[j - 1][i - 1] * fib(i - 1) * fib(W - i - 1)) % 1000000007

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

cd = collections.defaultdict

memo = cd(lambda: cd(int))

memo[0][1] = 1



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

mod = 10**9 + 7



fib = [1, 1, 2, 3, 5, 8, 13, 21] + [1] * 8





def count(h, w):

    if memo[h][w]:

        return memo[h][w]

    elif h == 0 or w == 0 or w == W + 1:

        return 0

    else:

        ret = count(h - 1, w) * fib[w - 1] * fib[W - w]

        ret += count(h - 1, w - 1) * fib[w - 2] * fib[W - w]

        ret += count(h - 1, w + 1) * fib[w - 1] * fib[W - w - 1]

        ret %= mod

        memo[h][w] = ret

        return ret





print((count(H, K)))

H, W, K = [int(_) for _ in input().split()]
if W == 1:
    print((1))
else:

    def fib(j):
        if j == 0 or j == 1:
            return 1
        else:
            count = 0
            for num in range(2 ** (j - 1)):
                bit = str(bin(num))
                flag = 1
                for i in range(2, len(bit) - 1):
                    if bit[i] == "1" and bit[i + 1] == "1":
                        flag = 0
                count += flag
            return count

    dp = [[1] + [0] * (W - 1)]
    for j in range(1, H + 1):
        dp.append([0] * W)
        for i in range(W):
            if i == 0:
                dp[j][i] = (
                    dp[j - 1][i] * fib(i) * fib(W - i - 1)
                    + dp[j - 1][i + 1] * fib(i) * fib(W - i - 2)
                ) % 1000000007
            elif i == W - 1:
                dp[j][i] = (
                    dp[j - 1][i] * fib(i) * fib(W - i - 1)
                    + dp[j - 1][i - 1] * fib(i - 1) * fib(W - i - 1)
                ) % 1000000007
            else:
                dp[j][i] = (
                    dp[j - 1][i] * fib(i) * fib(W - i - 1)
                    + dp[j - 1][i + 1] * fib(i) * fib(W - i - 2)
                    + dp[j - 1][i - 1] * fib(i - 1) * fib(W - i - 1)
                ) % 1000000007
    print((dp[H][K - 1]))

import collections

cd = collections.defaultdict
memo = cd(lambda: cd(int))
memo[0][1] = 1
H, W, K = [int(_) for _ in input().split()]
mod = 10**9 + 7
fib = [1, 1, 2, 3, 5, 8, 13, 21] + [1] * 8


def count(h, w):
    if memo[h][w]:
        return memo[h][w]
    elif h == 0 or w == 0 or w == W + 1:
        return 0
    else:
        ret = count(h - 1, w) * fib[w - 1] * fib[W - w]
        ret += count(h - 1, w - 1) * fib[w - 2] * fib[W - w]
        ret += count(h - 1, w + 1) * fib[w - 1] * fib[W - w - 1]
        ret %= mod
        memo[h][w] = ret
        return ret


print((count(H, K)))

+import collections + +cd = collections.defaultdict +memo = cd(lambda: cd(int)) +memo[0][1] = 1 -if W == 1: -    print((1)) -else: +mod = 10**9 + 7 +fib = [1, 1, 2, 3, 5, 8, 13, 21] + [1] * 8 -    def fib(j): -        if j == 0 or j == 1: -            return 1 -        else: -            count = 0 -            for num in range(2 ** (j - 1)): -                bit = str(bin(num)) -                flag = 1 -                for i in range(2, len(bit) - 1): -                    if bit[i] == "1" and bit[i + 1] == "1": -                        flag = 0 -                count += flag -            return count -    dp = [[1] + [0] * (W - 1)] -    for j in range(1, H + 1): -        dp.append([0] * W) -        for i in range(W): -            if i == 0: -                dp[j][i] = ( -                    dp[j - 1][i] * fib(i) * fib(W - i - 1) -                    + dp[j - 1][i + 1] * fib(i) * fib(W - i - 2) -                ) % 1000000007 -            elif i == W - 1: -                dp[j][i] = ( -                    dp[j - 1][i] * fib(i) * fib(W - i - 1) -                    + dp[j - 1][i - 1] * fib(i - 1) * fib(W - i - 1) -                ) % 1000000007 -            else: -                dp[j][i] = ( -                    dp[j - 1][i] * fib(i) * fib(W - i - 1) -                    + dp[j - 1][i + 1] * fib(i) * fib(W - i - 2) -                    + dp[j - 1][i - 1] * fib(i - 1) * fib(W - i - 1) -                ) % 1000000007 -    print((dp[H][K - 1])) +def count(h, w): +    if memo[h][w]: +        return memo[h][w] +    elif h == 0 or w == 0 or w == W + 1: +        return 0 +    else: +        ret = count(h - 1, w) * fib[w - 1] * fib[W - w] +        ret += count(h - 1, w - 1) * fib[w - 2] * fib[W - w] +        ret += count(h - 1, w + 1) * fib[w - 1] * fib[W - w - 1] +        ret %= mod +        memo[h][w] = ret +        return ret + + +print((count(H, K)))