#include <bits/stdc++.h>
using namespace std;
struct Node {
  int p;
  int size;
};
const int N = 2 * 1e5 + 10;
int n;
int adad[N];
string str;
Node nodes[N];
void make() {
  for (int i = 0; i < n; i++) {
    nodes[i].p = i;
    nodes[i].size = 1;
  }
}
int find(int x) {
  return nodes[x].p = (nodes[x].p == x ? x : find(nodes[x].p));
}
void merge(int a, int b) {
  a = find(a);
  b = find(b);
  if (a == b) {
    return;
  }
  if (nodes[a].size > nodes[b].size) {
    swap(a, b);
  }
  nodes[a].p = b;
  nodes[b].size += nodes[a].size;
  nodes[a].size = 0;
}
void solve() {
  make();
  for (int i = 0; i < str.size(); i++) {
    if (str[i] == '1') {
      merge(i, i + 1);
    }
  }
  int p[n];
  for (int i = 0; i < n; i++) {
    p[adad[i]] = find(i);
  }
  sort(adad, adad + n);
  for (int i = 0; i < n; i++) {
    if (find(i) != p[adad[i]]) {
      cout << "NO";
      return;
    }
  }
  cout << "YES";
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> adad[i];
    adad[i]--;
  }
  cin >> str;
  solve();
}
