#include <bits/stdc++.h>
using namespace std;
long long int fact[1001];
long long int binpow(long long int a, long long int b) {
  long long int res = 1;
  while (b > 0) {
    if (b & 1) res = (res * a) % 1000000007;
    a = (a * a) % 1000000007;
    b >>= 1;
  }
  return res;
}
long long int cal(long long int c, long long int k) {
  long long int res = fact[c];
  long long int res1 =
      ((fact[k] % 1000000007) * (fact[(c - k)] % 1000000007)) % 1000000007;
  long long int res0;
  res0 = binpow(res1, 1000000007 - 2);
  return ((res * res0) % 1000000007);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, x, p;
  cin >> n >> x >> p;
  long long int l = 0, r = n;
  long long int c = 0, c1 = 0;
  fact[0] = 1;
  for (long long int i = 1; i <= 1000; i++) {
    fact[i] = (fact[i - 1] * i) % 1000000007;
  }
  while (l < r) {
    long long int m = l + (r - l) / 2;
    if (m <= p) {
      l = m + 1;
      c++;
    } else {
      r = m;
      c1++;
    }
  }
  c--;
  long long int ans = cal(n - x, c1);
  long long int ans2 = cal(x - 1, c);
  ans = (ans * ans2) % 1000000007;
  ans = (ans * fact[c1]) % 1000000007;
  ans = (ans * fact[c]) % 1000000007;
  ans = (ans * (fact[n - 1 - c - c1])) % 1000000007;
  cout << ans << endl;
  return 0;
}
