import std.stdio, std.string, std.range, std.conv, std.array, std.algorithm, std.math, std.typecons, std.functional;

enum N = 1_000_000_007;

void main() {
    const tmp = readln.split.to!(int[]);
    const H = tmp[0], W = tmp[1], K = tmp[2];

    ulong _countCase(int x) {
        if (x <= 0) return 1;
        return memoize!_countCase(x-1) + memoize!_countCase(x-2);
    }
    alias countCase = memoize!_countCase;

    ulong func(int current, int cnt) {
        if (cnt == H) return current == K ? 1 : 0;
        ulong res = 0;
        res += memoize!func(current, cnt+1) * countCase(current-2) * countCase(W-current-1);
        if (1 < current) res += memoize!func(current-1, cnt+1) * countCase(current-3) * countCase(W-current-1);
        if (current < W) res += memoize!func(current+1, cnt+1) * countCase(current-2) * countCase(W-current-2);
        return res % N;
    }

    writeln(func(1, 0));
}

