#include <bits/stdc++.h>
using namespace std;
const int maxN = 11111;
pair<int, int> a[maxN];
short dp[maxN][maxN];
int s[maxN];
bool mycmp(pair<int, int> a, pair<int, int> b) {
  if (a.second != b.second) return (a.second < b.second);
  return (a.first > b.first);
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, l, r;
  cin >> n >> l >> r;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i].first;
  }
  for (int i = 1; i <= n; ++i) {
    cin >> a[i].second;
  }
  sort(a + 1, a + n + 1, mycmp);
  int sum = 0;
  for (int i = 1; i <= n; ++i) {
    sum += a[i].first;
  }
  s[0] = 0;
  for (int i = 1; i <= n; ++i) {
    s[i] = s[i - 1] + a[i].first;
  }
  for (int i = 0; i <= n; ++i) {
    for (int j = 0; j <= sum; ++j) {
      dp[i][j] = -1;
    }
  }
  dp[0][0] = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j <= s[i]; ++j) {
      if (dp[i][j] < 0) continue;
      int type = a[i + 1].second, w = a[i + 1].first;
      if (type == 0) {
        dp[i + 1][j + w] = max(dp[i + 1][j + w], dp[i][j]);
        dp[i + 1][j] = max(dp[i + 1][j], dp[i][j]);
      } else {
        int x = j, y = sum - (s[i] - j);
        short f1 = (x >= l && x <= r);
        if (dp[i][j] + f1 > dp[i + 1][j + w]) {
          dp[i + 1][j + w] = dp[i][j] + f1;
        }
        short f2 = (y - a[i + 1].first >= l && y - a[i + 1].first <= r);
        if (dp[i][j] + f2 > dp[i + 1][j]) {
          dp[i + 1][j] = dp[i][j] + f2;
        }
      }
    }
  }
  short ans = -1;
  for (int i = 0; i <= sum; ++i) {
    ans = max(ans, dp[n][i]);
  }
  cout << ans << endl;
  return 0;
}
