#include <bits/stdc++.h>
int dr[] = {2, 2, -2, -2, 1, -1, 1, -1};
int dc[] = {1, -1, 1, -1, 2, 2, -2, -2};
int dr1[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dc1[] = {-1, 1, -1, 0, 1, -1, 0, 1};
int dr2[] = {-1, -1, -1};
int dc2[] = {-1, 1, 0};
using namespace std;
int dp[40000000], n, m, l;
long long int cal(long long int x, long long int y, long long int z) {
  if (z > n || y < 0 || y > n || y > (m - x + 1)) return 0;
  if (x > m) {
    return (z == n && y == 0);
  }
  long long int k = x * (n + 1) * (n + 1) + z * (n + 1) + y;
  int &r = dp[k];
  if (r != -1) return r;
  r = 0;
  if (x == l) {
    r += cal(x + 1, y + 1, z);
    r %= 1000000007;
    r += cal(x + 1, y, z + 1);
    r %= 1000000007;
  } else {
    r += cal(x + 1, y - 1, z + 1);
    r %= 1000000007;
    r += cal(x + 1, y + 1, z);
    r %= 1000000007;
    r += cal(x + 1, y, z + 1);
    r %= 1000000007;
    r += cal(x + 1, y, z);
    r %= 1000000007;
  }
  return r;
}
int main() {
  long long int i, j;
  while (cin >> n >> m >> l) {
    if (n > m) {
      cout << "0" << endl;
      continue;
    }
    memset(dp, -1, sizeof(dp));
    long long int ans = cal(1, 0, 0);
    for (i = 1; i <= n; i++) ans = (ans * i) % 1000000007;
    cout << ans << endl;
  }
  return 0;
}
