#include <bits/stdc++.h>
using namespace std;
vector<int> memo[305][305];
int n, m, x;
int dp(int pos, int open, int seg) {
  if (seg < 0) return 0;
  if (pos == m) {
    if (open == 0 && seg == 0) return 1;
    return 0;
  }
  int &ret = memo[open][seg][pos];
  if (ret != -1) return ret;
  if (pos == x) {
    if (open)
      return ret = (dp(pos + 1, open + 1, seg - 1) % 1000000007 +
                    dp(pos + 1, open, seg - 1) % 1000000007) %
                   1000000007;
    return ret = dp(pos + 1, open + 1, seg - 1) % 1000000007 +
                 dp(pos + 1, open, seg - 1) % 1000000007;
  }
  if (open)
    return ret = ((((dp(pos + 1, open + 1, seg - 1) % 1000000007 +
                     dp(pos + 1, open, seg - 1) % 1000000007) %
                        1000000007 +
                    dp(pos + 1, open, seg) % 1000000007) %
                       1000000007 +
                   dp(pos + 1, open - 1, seg) % 1000000007)) %
                 1000000007;
  return ret = ((dp(pos + 1, open + 1, seg - 1) % 1000000007 +
                 dp(pos + 1, open, seg) % 1000000007) %
                    1000000007 +
                dp(pos + 1, open, seg - 1) % 1000000007) %
               1000000007;
}
long long fact(long long a) {
  if (a == 1) return 1;
  return fact(a - 1) * a % 1000000007;
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n >> m >> x;
  x--;
  if (n > m) {
    cout << 0 << endl;
    return 0;
  }
  for (int i = 0; i < n + 1; i++) {
    for (int j = 0; j < n + 1; j++) {
      for (int k = 0; k < m + 2; k++) memo[i][j].push_back(-1);
    }
  }
  cout << (long long)fact(n) * dp(0, 0, n) % 1000000007 << endl;
  return 0;
}
