#include <bits/stdc++.h>
using namespace std;
const int OO = 1e9;
int dp[51][2501];
struct B {
  int in;
  int num;
  char col;
  B() {}
  B(int _in, int _num, char _col) : in{_in}, num{_num}, col{_col} {}
};
bool operator<(const B& a, const B& b) { return a.num < b.num; }
int main() {
  int n, s, k;
  cin >> n >> s >> k;
  int r[n + 1];
  for (int i = 1; i <= n; i++) cin >> r[i];
  string c;
  cin >> c;
  c = '0' + c;
  vector<B> v(n + 1);
  v[0] = B(0, 0, -1);
  for (int i = 1; i <= n; i++) {
    v[i] = (B(i, r[i], c[i]));
  }
  sort(v.begin(), v.end());
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j < 2501; j++) dp[i][j] = OO;
    if (i) dp[i][v[i].num] = abs(v[i].in - (s));
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < 2501; j++) {
      for (int k = 1; k < i; k++) {
        if (v[i].num <= j && v[k].num < v[i].num && v[i].col != v[k].col) {
          dp[i][j] =
              min(dp[i][j], dp[k][j - v[i].num] + abs(v[i].in - v[k].in));
        }
      }
    }
  }
  int res = OO;
  for (int i = 1; i <= n; i++) {
    for (int j = k; j <= 2500; j++) {
      res = min(res, dp[i][j]);
    }
  }
  if (res == OO)
    cout << -1;
  else
    cout << res;
  return 0;
}
