#include <bits/stdc++.h>
#define rep(i,n) for (int i = 0; i < (int)(n); i++)
#define REP(i,n) for (int i = 1; i < (int)(n); i++)
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define debug(var) do{cout << #var << " : "; view(var);}while(0)
template<class T> bool chmin(T &a, T b) {if(a>b) {a=b;return 1;}return 0;}
template<class T> bool chmax(T &a, T b) {if(a<b) {a=b;return 1;}return 0;}
using namespace std;
template<class T> void view(T e) {cout << e << endl;}
template<class T> void view(const vector<T> &v) {for(const auto &e : v){cout << e << " ";} cout << endl;}
template<class T> void view(const vector<vector<T>> &vv) {for(const auto &v : vv){view(v);}}
using vint = vector<int>;
using vvint = vector<vector<int>>;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vector<ll>>;
using P = pair<int,int>;
const int inf = 1e9;
const ll inf_l = 1e18;
const int MAX = 1e5;

const int mod = 1e9+7;
struct mint {
    ll x;
    mint (ll x = 0) : x((x%mod+mod)%mod) {}
    mint operator -() const {return mint(-x);}
    mint& operator +=(const mint a) {
        if ((x += a.x) >= mod) x -= mod;
        return *this;
    }
    mint& operator -=(const mint a) {
        if ((x += mod-a.x) >= mod) x -= mod;
        return *this;
    }
    mint& operator *=(const mint a) {(x *= a.x) %= mod; return *this;}
    mint operator +(const mint a) const {return mint(*this) += a;}
    mint operator -(const mint a) const {return mint(*this) -= a;}
    mint operator *(const mint a) const {return mint(*this) *= a;}
    mint pow(ll t) const {
        if (!t) return 1;
        mint a = pow(t>>1);
        a *= a;
        if (t&1) a *= *this;
        return a;
    }
    mint inv() const {return pow(mod-2);}
    mint operator /=(const mint a) {return *this *= a.inv();}
    mint operator /(const mint a) {return mint(*this) /= a;}
};
istream& operator >>(istream &is, const mint &a) {return is >> a.x;}
ostream& operator <<(ostream &os, const mint &a) {return os << a.x;}

int main() {
    int h, w, k; cin >> h >> w >> k;
    vector<mint> dp(w,0);
    dp[0] = 1;
    rep(i,h) {
        vector<mint> dp_tmp(w,0);
        rep(j,1<<(w-1)) {
            bool ok = true;
            rep(k,w-1) {
                if (j>>k&1) {
                    if (k == 0 && j>>(k+1)&1) ok = false; 
                    if (k == w-2 && j>>(k-1)&1) ok = false;
                    if (k != 0 && k != w-2) {
                        if (j>>(k-1)&1 || j>>(k+1)&1) ok = false;
                    }
                }
            }
            if (ok) {
                rep(k,w) {
                    if (k == 0) {
                        if (j>>k&1) dp_tmp[k+1] += dp[k];
                        else dp_tmp[k] += dp[k];
                    } else if (k == w-1) {
                        if (j>>(k-1)&1) dp_tmp[k-1] += dp[k];
                        else dp_tmp[k] += dp[k];
                    } else {
                        if (j>>(k-1)&1) dp_tmp[k-1] += dp[k];
                        else if (j>>k&1) dp_tmp[k+1] += dp[k];
                        else dp_tmp[k] += dp[k];
                    }
                }
            }
        }
        swap(dp,dp_tmp);
    }
    cout << dp[k-1] << endl;
}

Measured memory_bytes: 3604