#include <bits/stdc++.h>
const int MAX = 2e5;
const int MAXM = 320;
const int MOD = 1e9 + 7;
using namespace std;
int N, M, X, base;
long long fat[MAXM];
long long dp[MAX][2];
inline void F(long long &x, long long y) { x = (x + y) % MOD; }
int main() {
  scanf("%d%d%d", &M, &N, &X);
  fat[0] = 1LL;
  if (M > N) {
    printf("0\n");
    return 0;
  }
  for (int i = 1; i <= M; i++) fat[i] = (fat[i - 1] * i) % MOD;
  base = N + 2;
  for (int m = 0; m <= M; m++)
    for (int idx = N + 1; idx > 0; idx--)
      for (int at = 0; at <= M - m; at++) {
        long long &x = dp[base * at + idx][m % 2];
        if (idx == N + 1) {
          if (m == 0 && at == 0)
            x = 1LL;
          else
            x = 0LL;
          continue;
        }
        x = 0;
        if (idx == X) {
          if (m > 0) {
            F(x, dp[base * (at + 1) + idx + 1][(m - 1) % 2]);
            F(x, dp[base * at + idx + 1][(m - 1) % 2]);
          }
          continue;
        }
        F(x, dp[base * at + idx + 1][m % 2]);
        if (m > 0) {
          F(x, dp[(at + 1) * base + idx + 1][(m - 1) % 2]);
          F(x, dp[at * base + idx + 1][(m - 1) % 2]);
        }
        if (at > 0) F(x, dp[(at - 1) * base + idx + 1][m % 2]);
      }
  printf("%lld\n", (dp[1][M % 2] * fat[M]) % MOD);
}
