using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Text;

public class Program
{
    public void Proc()
    {
        int[] inpt = ScanInt();
        this.H = inpt[0];
        this.W = inpt[1];
        this.Goal = inpt[2];

        long ans = GetAns(1, 1);
        Console.WriteLine(ans);
    }

    private int H;
    private int W;
    private int Goal;

    private Dictionary<int, Dictionary<int, long>> dic = new Dictionary<int, Dictionary<int, long>>();

    private long GetAns(int down, int right) {
        if (H-down + 1 < Math.Abs(Goal-right)) {
            return 0;
        }

        if(down > H) {
            if(right == Goal) {
                return 1;
            } else {
                return 0;
            }
        }

        if(!dic.ContainsKey(down)) {
            dic.Add(down, new Dictionary<int, long>());
        }
        if(dic[down].ContainsKey(right)) {
            return dic[down][right];
        }

        // oriru
        long oriru = GetAns(down + 1, right);
        if(W >= 2) {
            if (right == 1 || right == W)
            {
                oriru = oriru * GetSub(W - 1);
                oriru = oriru % MOD;
            } else {
                oriru = oriru * GetSub(right - 1);
                oriru = oriru % MOD;
                oriru = oriru * GetSub(W - right);
                oriru = oriru % MOD;
            }
        }

        long left = 0;
        if(right > 1) {
            left = GetAns(down + 1, right - 1);
            if(W >= 3) {
                if (right == 2 || right == W)
                {
                    left = left * GetSub(W - 2);
                }
                else
                {
                    left = left * GetSub(right - 2);
                    left = left % MOD;
                    left = left * GetSub(W - right);
                }
                left = left % MOD;
            }
        }

        long moveRight = 0;
        if(right < W) {
            moveRight = GetAns(down + 1, right + 1);
            if(W >= 3) {
                if (right == 1 || right == W - 1)
                {
                    moveRight = moveRight * GetSub(W - 2);
                }
                else
                {
                    moveRight = moveRight * GetSub(right - 1);
                    moveRight = moveRight % MOD;
                    moveRight = moveRight * GetSub(W - (right + 1));
                }
                moveRight = moveRight % MOD;
            }
        }

        long ans = oriru + left + moveRight;
        ans = ans % MOD;
        dic[down][right] = ans;
        return ans;

    }


    private Dictionary<int, long> subDic = new Dictionary<int, long>();
    private long GetSub(int num) {
        if(subDic.ContainsKey(num)) {
            return subDic[num];
        }

        if(num == 1) {
            return 1;
        }

        if(num == 2) {
            return 2;
        }

        long tmp1 = GetSub(num - 1);
        long tmp2 = GetSub(num - 2);

        long tmp = tmp1 + tmp2;
        tmp = tmp % MOD;
        subDic[num] = tmp;
        return tmp;

    }

    private const long MOD = 1000000007;

    private int[] ScanInt() {
        return Reader.ReadLine().Split(' ').Select(a => int.Parse(a)).ToArray();
    }

    private long[] ScanLong() {
        return Reader.ReadLine().Split(' ').Select(a => long.Parse(a)).ToArray();
    }

    private string[] ScanStr() {
        return Reader.ReadLine().Split(' ').ToArray();
    }

    public class Reader
    {
        static StringReader sr;
        public static bool IsDebug = false;
        public static string ReadLine()
        {
            if (IsDebug)
            {
                if (sr == null)
                {
                    sr = new StringReader(InputText.Trim());
                }
                return sr.ReadLine();
            }
            else
            {
                return Console.ReadLine();
            }
        }
        private static string InputText = @"


15 8 5



";
    }

    public static void Main(string[] args)
    {
#if DEBUG
        Reader.IsDebug = true;
#endif
        Program prg = new Program();
        prg.Proc();
    }
}


Measured memory_bytes: 13408