#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
int Add(int x, int y) { return (x + y) % MOD; }
void Increase(int& x, int y) { x = Add(x, y); }
int Multiply(int x, int y) { return 1LL * x * y % MOD; }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m, x;
  cin >> n >> m >> x;
  if (n > m) {
    cout << 0;
    return 0;
  }
  vector<vector<vector<int>>> dp(
      m + 2, vector<vector<int>>(n + 1, vector<int>(n + 1)));
  dp[1][0][0] = 1;
  for (int i = 1; i <= m; ++i) {
    for (int segments = 0; segments <= min(i - 1, n); ++segments) {
      for (int opened = 0; opened <= segments; ++opened) {
        if (dp[i][segments][opened] == 0) {
          continue;
        }
        for (int openFlag = 0; openFlag < 2; ++openFlag) {
          for (int closeFlag = 0; closeFlag < 2; ++closeFlag) {
            if (i == x && openFlag == 0) {
              continue;
            }
            int newSegments = segments + openFlag;
            int newOpen = opened + openFlag - closeFlag;
            if (newSegments <= n && newOpen >= 0) {
              Increase(dp[i + 1][newSegments][newOpen],
                       dp[i][segments][opened]);
            }
          }
        }
      }
    }
  }
  int fact = 1;
  for (int i = 2; i <= n; ++i) {
    fact = Multiply(fact, i);
  }
  cout << Multiply(dp[m + 1][n][0], fact);
  return 0;
}
