Problem:
Score: 400 points

Problem Statement

Amidakuji is a traditional method of lottery in Japan.

To make an amidakuji, we first draw W parallel vertical lines, and then draw horizontal lines that connect them. The length of each vertical line is H+1 [cm], and the endpoints of the horizontal lines must be at 1, 2, 3, ..., or H [cm] from the top of a vertical line.

A valid amidakuji is an amidakuji that satisfies the following conditions:

No two horizontal lines share an endpoint.

The two endpoints of each horizontal lines must be at the same height.

A horizontal line must connect adjacent vertical lines.

Find the number of the valid amidakuji that satisfy the following condition, modulo 1\ 000\ 000\ 007: if we trace the path from the top of the leftmost vertical line to the bottom, always following horizontal lines when we encounter them, we reach the bottom of the K-th vertical line from the left.

For example, in the following amidakuji, we will reach the bottom of the fourth vertical line from the left.

Constraints

H is an integer between 1 and 100 (inclusive).

W is an integer between 1 and 8 (inclusive).

K is an integer between 1 and W (inclusive).

Input

Input is given from Standard Input in the following format:

H W K

Output

Print the number of the amidakuji that satisfy the condition, modulo 1\ 000\ 000\ 007.

Sample Input 1

1 3 2

Sample Output 1

1

Only the following one amidakuji satisfies the condition:

Sample Input 2

1 3 1

Sample Output 2

2

Only the following two amidakuji satisfy the condition:

Sample Input 3

2 3 3

Sample Output 3

1

Only the following one amidakuji satisfies the condition:

Sample Input 4

2 3 1

Sample Output 4

5

Only the following five amidakuji satisfy the condition:

Sample Input 5

7 1 1

Sample Output 5

1

As there is only one vertical line, we cannot draw any horizontal lines. Thus, there is only one amidakuji that satisfies the condition: the amidakuji with no horizontal lines.

Sample Input 6

15 8 5

Sample Output 6

437760187

Be sure to print the answer modulo 1\ 000\ 000\ 007.

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<stdlib.h>

#define NEW(p,n){p=malloc((n)*sizeof(p[0]));if(p==NULL){printf("not enough memory\n");exit(1);};}
//pの型の変数n個の要素分のメモリを確保し、そのアドレスをpに代入するマクロ

#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))

#define N 1000000007

int main(void){
    int H,W,K;
    scanf("%d%d%d",&H,&W,&K);

    //ans[H][W]は、縦の長さがH,終点がWのあみだくじの本数
    long ans[H+1][W+1];
    //初期値のans[0]を格納
    ans[0][1]=1;
    for(int i=2;i<=W;i++) ans[0][i]=0;

    //DP表を更新する
    for(int i=1;i<=H;i++){
        for(int j=1;j<=W;j++){
            //ans[i][j]がどう変わるのかを考える
            for(int k=0;k<(1<<(W-1));k++){
                //amida...あみだくじとして成立するなら0,しないなら1
                int amida=0;
                for(int l=0;l<(W-2);l++){
                    if(k&(1<<l) && k&(1<<(l+1))) amida=1;
                }

                //あみだくじとして成立しないならスキップ
                if(amida) continue;

                //左にずれて来るのを受け入れる
                if(j<W && (k>>(j-1))&1) ans[i][j]=(ans[i][j]+ans[i-1][j+1])%N;
                //右にずれて来るのを受け入れる
                else if(j>1 && (k>>(j-2))&1) ans[i][j]=(ans[i][j]+ans[i-1][j-1])%N;
                //そのまま
                else ans[i][j]=(ans[i][j]+ans[i-1][j])%N;
            }
        }
    }
    
    printf("%ld\n",ans[H][K]);

    return 0;
}