#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, srt, end) for (long long i = (srt); i < (long long)(end); i++)

constexpr ll mod = 1000000000 + 7;

ll dp[200][10];

void init() {
    rep(i, 0, 200) rep(j, 0, 10) dp[i][j] = 0;
}

int main(){

    init();

    // input
    ll h, w, k;
    cin >> h >> w >> k;

    // dp
    dp[0][0] = 1;
    rep(i, 0, h) {
        rep(j, 0, w) {
            for(int bit = 0; bit < (1<<(w-1)); bit++) {
                bool f = true;
                rep(k, 0, w-2) {
                    if((bit & (1<<k)) && (bit & (1<<(k+1)))) f = false;
                }
                if(!f) continue;
                if(j >= 1 && (bit & (1 << (j-1) ) ) ) {
                    dp[i+1][j-1] += dp[i][j];
                    dp[i+1][j-1] %= mod;
                }else if(j <= w-2 && (bit & (1<<j) ) ) {
                    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;
                }
            }
        }
    }
    
    cout << dp[h][k-1] << endl;
    return 0;
}
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <bitset>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
#include <numeric>
#include <iostream>
#include <iomanip>
#include <string>
#include <chrono>
#include <random>
#include <cmath>
#include <cassert>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <functional>
#include <sstream>

using namespace std;



int main(int argc, char** argv) {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n, m, K;
    cin >> n >> m >> K;

    if (m == 1) {
        if (K == 1) {
            cout << 1 << '\n';
        } else {
            cout << 0 << '\n';
        }
        return 0;
    }

    const long long MOD = 1000000007;

    int M = 1 << (m - 1);

    vector<long long> dp(m, 0);
    dp[0] = 1;
    auto ndp = dp;

    vector<vector<long long>> cnts(m, vector<long long>(3, 0));
    int total = 0;
    for (int i = 0; i < M; ++i) {
        if (i & (i >> 1)) {
            continue;
        }
        ++total;

        for (int j = 0; j < m - 1; ++j) {
            if (i & (1 << j)) {
                cnts[j + 1][0] += 1;
                cnts[j][2] += 1;
            }
        }
    }
    for (int i = 0; i < m; ++i) {
        cnts[i][1] = total - cnts[i][0] - cnts[i][2];
    }

    for (int _ = 0; _ < n; ++_) {
        fill(ndp.begin(), ndp.end(), 0);
        for (int i = 0; i < m; ++i) {
            for (int j = -1, k = 0; k <= 2; ++k, ++j) {
                int ni = i + j;
                if (ni >= 0 && ni < m) {
                    (ndp[ni] += (dp[i] * cnts[i][k]) % MOD) %= MOD;
                }
            }
        }
        swap(ndp, dp);
    }

    cout << dp[K - 1] << '\n';

    return 0;
}