#include <bits/stdc++.h>
using namespace std;
char p[30] = {'0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
              'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
              'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
inline long long rd() {
  long long x = 0, flag = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') flag = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch ^ 48);
    ch = getchar();
  }
  return x * flag;
}
int n, x, pos;
long long fac[1020], inv[1020], a[1020];
inline long long ksm(long long x, int y) {
  long long res = 1;
  while (y) {
    if (y & 1) res *= x, res %= 1000000007;
    x *= x, x %= 1000000007;
    y >>= 1;
  }
  return res;
}
inline long long C(long long x, long long y) {
  return fac[y] * inv[x] % 1000000007 * inv[y - x] % 1000000007;
}
inline int lowbit(int x) { return x & (-x); }
int main() {
  cin >> n >> x >> pos;
  fac[0] = inv[0] = 1;
  for (register int i = 1; i <= 1010; ++i)
    fac[i] = 1ll * i * fac[i - 1] % 1000000007;
  for (register int i = 1; i <= 1010; ++i) inv[i] = ksm(fac[i], 1000000007 - 2);
  int cnt1 = 0, cnt2 = 0, cnt3 = 0;
  int l = 0, r = n;
  while (l < r) {
    int mid = (l + r) >> 1;
    if (mid <= pos)
      l = mid + 1, a[mid] = 1;
    else
      r = mid, a[mid] = 2;
  }
  for (register int i = 0; i <= n - 1; ++i) {
    if (i == pos) continue;
    if (!a[i]) cnt1++;
    if (a[i] == 1) cnt2++;
    if (a[i] == 2) cnt3++;
  }
  if (cnt3 > n - x || cnt2 > x - 1) {
    cout << 0 << endl;
    return 0;
  }
  cout << C(cnt2, x - 1) * fac[cnt2] % 1000000007 * C(cnt3, n - x) %
              1000000007 * fac[cnt3] % 1000000007 * fac[cnt1] % 1000000007;
  return 0;
}
