#include <bits/stdc++.h>
using namespace std;
long long fn(int i, int taken, int f);
long long tabular();
int con(int i, int j);
long long dp[2][500][500];
int n, m, x;
long long const MOD = 1000000007;
int main() {
  scanf("%d %d %d", &m, &n, &x);
  x--;
  long long fac = 1;
  for (long long i = 1; i <= m; i++) fac = fac * i, fac %= MOD;
  printf("%lld\n", (tabular() * fac) % MOD);
  return 0;
}
long long tabular() {
  if (m > 2 * n) return 0;
  for (int i = n; i >= 0; i--)
    for (int open = 0; open <= m; open++)
      for (int close = open; close >= 0; close--) {
        long long &ret = dp[i % 2][open][close];
        ret = 0;
        if (close > open || open > m)
          ret = 0;
        else if (i == n)
          ret = (open == close && open == m);
        else {
          if (i != x) {
            ret += dp[(i + 1) % 2][open][close], ret %= MOD;
            if (open > close)
              ret += dp[(i + 1) % 2][open][close + 1], ret %= MOD;
          }
          if (open + 1 <= m)
            ret += dp[(i + 1) % 2][open + 1][close], ret %= MOD;
          if (open == close && open + 1 <= m)
            ret += dp[(i + 1) % 2][open + 1][close + 1], ret %= MOD;
          else {
            if (open - close > 0 && open + 1 <= m)
              ret += dp[(i + 1) % 2][open + 1][close + 1], ret %= MOD;
          }
        }
      }
  return dp[0][0][0];
}
