#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<n; i++)
#define REP(i,m,n) for(ll i=(ll)(m);i<(ll)(n);i++)
#define fi first
#define se second
long long mo = 1000000007;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> Pii;
typedef pair<ll,ll> Pll;
typedef pair<ll,Pll> PlP;
template<class T, class S> void cmin(T &a, const S &b) { if (a > b)a = b; }
template<class T, class S> void cmax(T &a, const S &b) { if (a < b)a = b; }
template<class A>void PR(A a,ll n){rep(i,n){if(i)cout<<' ';cout<<a[i];}cout << "\n";}
ld PI=3.14159265358979323846;
 
const int mod = 1000000007;
class mint {
    long long x;
public:
    mint(long long 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 {
        mint res(*this);
        return res+=a;
    }
    mint operator-(const mint& a) const {
        mint res(*this);
        return res-=a;
    }
    mint operator*(const mint& a) const {
        mint res(*this);
        return res*=a;
    }
    mint pow(ll t) const {
        if (!t) return 1;
        mint a = pow(t>>1);
        a *= a;
        if (t&1) a *= *this;
        return a;
    }
    // for prime mod
    mint inv() const {
        return pow(mod-2);
    }
    mint& operator/=(const mint& a) {
        return (*this) *= a.inv();
    }
    mint operator/(const mint& a) const {
        mint res(*this);
        return res/=a;
    }
 
    friend ostream& operator<<(ostream& os, const mint& m){
        os << m.x;
        return os;
    }
};

mint dp1[10][2];
mint dp2[10][2];
mint st[101][9];

int main(){
    ll H,W,K;
    cin >> H >> W >> K;
    dp1[0][0] = 1;
    rep(j,W-1){
        dp1[j+1][0] += dp1[j][1] + dp1[j][0];
        dp1[j+1][1] += dp1[j][0];
    }
    /*
    rep(j,W){
        cout << dp1[j][0] << " ";
    }
    cout << endl;
    rep(j,W){
        cout << dp1[j][1] << " ";
    }
    cout << endl;*/
    dp2[W-1][0] = 1;
    for(ll j=W-2;j>=0;j--){
        dp2[j][0] += dp2[j+1][1] + dp2[j+1][0];
        dp2[j][1] += dp2[j+1][0];
    }
    
    /*rep(j,W){
        cout << dp2[j][0] << " ";
    }
    cout << endl;
    rep(j,W){
        cout << dp2[j][1] << " ";
    }
    cout << endl;
    cout << "aaaaaaaaa" << endl;*/
    st[0][0] = 1;
    rep(i,H){
        REP(j,0,W){
            //st[i+1][j] = st[i][j];
            if(j-1 >= 0 && W-1>= j+1){
                st[i+1][j] = (dp1[j-1][0])*st[i][j-1]*(dp2[j-1][1]) + dp1[j][0]*st[i][j]*dp2[j][0] + dp1[j+1][1]*st[i][j+1]*(dp2[j+1][0]);///st[i+1][j] + st[i][j+1] + st[i+1][j+2];
                //st[i+1][j] = (dp1[j][0]+dp1[j][1])*st[i][j+1]*dp2[j][1] + dp1[j][0]*st[i][j]*dp2[j][0] + dp1[j][1]*st[i][j-1]*(dp2[j][0]+dp2[j][1]);///st[i+1][j] + st[i][j+1] + st[i+1][j+2];
            }else if(j-1>=0){
                st[i+1][j] = dp2[j][0]*st[i][j]*dp1[j][0] + dp1[j][1]*st[i][j-1]*(dp2[j][0]);// + st[i][j];
            }else if(W-1 >= j+1){
                st[i+1][j] = dp1[j][0]*st[i][j]*dp2[j][0] + (dp1[j][0])*st[i][j+1]*dp2[j][1];// + st[i][j+1]*dp2[j+1][0];
            }else{
                st[i+1][j] = st[i][j];
            }
        }
    }
    //PR(st[0], W+1);
    //PR(st[1], W+1);
    //PR(st[2], W+1);
    cout << st[H][K-1] << endl;
}

Measured memory_bytes: 3648