#include <bits/stdc++.h>
using namespace std;
const int mod = (int)1e9 + 7;
int n, m, X;
int f[2][350][350], sw;
int Ans;
void dpto(int x, int& a) {
  if (a += x, a >= mod) a -= mod;
}
void trans(int x, int a[][350], int b[][350]) {
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++) b[i][j] = 0;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++)
      if (a[i][j]) {
        dpto(a[i][j], b[i + 1][j + 1]);
        if (j) dpto(a[i][j], b[i + 1][j]);
        if (x == X) continue;
        dpto(a[i][j], b[i][j]);
        if (j) dpto(a[i][j], b[i][j - 1]);
      }
}
int main() {
  scanf("%d%d%d", &n, &m, &X);
  if (n > m) {
    printf("0\n");
    return 0;
  }
  f[sw][0][0] = 1;
  for (int i = 1; i <= m; i++) trans(i, f[sw], f[sw ^ 1]), sw ^= 1;
  Ans = (f[sw][n][0] + f[sw][n][1]) % mod;
  for (int i = 1; i <= n; i++) Ans = (long long)Ans * i % mod;
  printf("%d\n", Ans);
}
