#include <bits/stdc++.h>
using namespace std;
const int Maxn = 320;
const int inf = 2147483647;
const int mod = 1000000007;
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();
  return x * f;
}
void upd(int &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
int n, m, X, f[2][Maxn][Maxn];
int main() {
  n = read(), m = read(), X = read();
  if (n > m) return puts("0"), 0;
  int now = 0;
  memset(f[now], 0, sizeof(f[now]));
  f[0][0][0] = 1;
  for (int i = 0; i < m; i++) {
    now ^= 1;
    for (int j = 0; j <= min(i, n) + 1; j++)
      for (int k = 0; k <= min(i, n) + 1; k++) f[now][j][k] = 0;
    for (int j = 0; j <= min(i, n); j++)
      for (int k = 0; k <= min(i, n); k++)
        if (f[now ^ 1][j][k]) {
          int t = f[now ^ 1][j][k];
          if (i + 1 == X) {
            upd(f[now][j + 1][k], t);
            upd(f[now][j + 1][k + 1], t);
          } else {
            upd(f[now][j][k], t);
            upd(f[now][j + 1][k], t);
            if (j > k) upd(f[now][j][k + 1], t);
            upd(f[now][j + 1][k + 1], t);
          }
        }
  }
  int ans = f[now][n][n];
  for (int i = 1; i <= n; i++) ans = (long long)ans * i % mod;
  printf("%d", ans);
}
