#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll MOD = 1000000007;

#define vec                vector<int>
#define vecll              vector<ll>
#define vecd               vector<double>
#define vecst              vector<string>
#define vecb               vector<bool>
#define vec2(var, n, m)    vector<vector<int>> var(n, vector<int>(m, 0))
#define vecll2(var, n, m)  vector<vector<ll>> var(n, vector<ll>(m, 0))

#define rep(i,n)         for(ll i=(ll)0; i<(ll)n; i++)
#define REP(i,m,n)       for(ll i=(ll)m; i<(ll)n; i++)
#define arr(var, n)      vec var(n); rep(i,n){cin >> var[i];}
#define arrll(var, n)    vecll var(n); rep(i,n){cin >> var[i];}
#define arrst(var, n)    vecst var(n); rep(i,n){cin >> var[i];}
#define all(var)         (var).begin(), (var).end()
#define sortall(var)     sort(all(var))
#define uniqueall(v)     v.erase(unique(v.begin(), v.end()), v.end());
#define f_sum(var)       accumulate(all(var), 0)
#define f_sumll(var)     accumulate(all(var), 0LL)
#define chmin(v1, v2)    v1 = min(v1, v2)
#define chmax(v1, v2)    v1 = max(v1, v2)
#define pb(var)          push_back(var)
#define prt(var)         cout << (var) << "\n"
#define prtd(n, var)     cout << fixed << setprecision(n) << (var) << "\n"
#define prtfill(n, var)  cout << setw(n) << setfill('0') << (var);
#define prt2(v1, v2)     cout << (v1) << " " << (v2) << "\n"
#define prt3(v1, v2, v3) cout << (v1) << " " << (v2) << " " << (v3) << "\n"
#define prtall(v)        rep(i,v.size()){cout<<v[i]<<(i!=v.size()-1?" ":"\n");}
void prtok(bool ok){prt(ok ? "Yes" : "No");}
//----------------------------------------------------------------

int main(void) {
  int h, w, k;
  cin >> h >> w >> k;
  vecll2(dp, h+1, w+2);
  dp[0][1]=1;
  vecll num={1,2,3,5,8,13,21};
  rep(i,h){
    REP(j,1,w+1){
      ll p = max(0ll, j-2-1);
      ll q = max(0ll, w-(j+1));
      dp[i+1][j] += dp[i][j-1]*num[p]*num[q];
      dp[i+1][j] %= MOD;

      p = max(0ll, j-1-1);
      dp[i+1][j] += dp[i][j]*num[p]*num[q];
      dp[i+1][j] %= MOD;

      q = max(0ll, w-(j+2));
      dp[i+1][j] += dp[i][j+1]*num[p]*num[q];
      dp[i+1][j] %= MOD;
    }
  }

  prt(dp[h][k]);
}

#include <iostream>
#include <complex>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdio>
#include <numeric>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <cmath>
#include <bitset>
#include <cassert>
#include <queue>
#include <stack>
#include <deque>
#include <random>
#include <iomanip>
typedef long long int ll;
typedef long double ld;
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
const ll MOD=1000000007;
const ll MAX_N=500010;
const ll INF=999999999999;
ll num[110][8];

int main(){
    int H,W,k;
    ll ans;
    cin>>H>>W>>k;
    num[0][0]=1;
    bool f=true;
    for(int i=1;i<8;i++) num[0][i]=0;
    for(int h=1;h<=H;h++){
        for(int w=0;w<(1<<(W-1))-1;w++){
            for(int i=0;i<W-1;i++){
                if(w>>i & 1  &&  w>>(i+1) & 1) f=false;   
            }
            if(f){
                int v[]={0,1,2,3,4,5,6,7};
                for(int i=0;i<W-1;i++){
                    if(w>>i & 1){
                        v[W-1-i]--;
                        v[W-1-i-1]++;
                    }
                }
                for(int i=0;i<8;i++){
                    num[h][i]+=num[h-1][v[i]];
                    num[h][i]%=MOD;
                }
            }
            f=true;
        }
    }
    if(W==1){
        ans=1;
    }else{
        ans=num[H][k-1];
    }
    cout<<ans<<endl;
    return 0;
}