#include <bits/stdc++.h>
const int N = 320, mo = 1e9 + 7;
int n, m, x, z, f[N][N];
void add(int &x) {
  if ((x += z) > mo) x -= mo;
}
int main() {
  scanf("%d%d%d", &n, &m, &x);
  if (n > m) {
    puts("0");
    return 0;
  }
  f[0][0] = 1;
  for (int k = 1; k <= m; k++) {
    for (int i = n; i >= 0; i--)
      for (int j = i; j >= 0; j--)
        if (z = f[i][j]) {
          if (i < n) {
            add(f[i + 1][j]);
            add(f[i + 1][j + 1]);
          }
          if (k == x)
            f[i][j] = 0;
          else if (j < i)
            add(f[i][j + 1]);
        }
  }
  int ans = f[n][n];
  for (int i = 1; i <= n; i++) ans = 1LL * ans * i % mo;
  printf("%d\n", ans);
}
