#include <bits/stdc++.h>
using namespace std;
struct Caixa {
  int i;
  int k;
  int c;
};
Caixa v[5010];
int n, s, k;
bool comp(Caixa a, Caixa b) { return a.k < b.k; }
int memo[60][60][4][2010];
int dp(int i, int j, int cor, int t) {
  if (t >= k) return 0;
  if (i == n) return 0x3f3f3f3f;
  if (memo[i][j][cor][t] != -1) return memo[i][j][cor][t];
  if ((v[i].k > v[j].k) and (cor != v[i].c)) {
    return memo[i][j][cor][t] =
               min(dp(i + 1, j, cor, t),
                   dp(i + 1, i, v[i].c, t + v[i].k) + abs(v[i].i - v[j].i));
  } else {
    return memo[i][j][cor][t] = dp(i + 1, j, cor, t);
  }
}
int main() {
  cin >> n >> s >> k;
  for (int i = 0; i < n; i++) {
    cin >> v[i].k;
    v[i].i = i;
  }
  for (int i = 0; i < n; i++) {
    char cor;
    cin >> cor;
    switch (cor) {
      case 'R':
        v[i].c = 0;
        break;
      case 'G':
        v[i].c = 1;
        break;
      case 'B':
        v[i].c = 2;
        break;
    }
  }
  sort(v, v + n, comp);
  int res = 0x3f3f3f3f;
  memset(memo, -1, sizeof(memo));
  for (int i = 0; i < n; i++) {
    res = min(res, dp(i + 1, i, v[i].c, v[i].k) + abs(v[i].i - s + 1));
  }
  if (res < 0x3f3f3f3f)
    cout << res << '\n';
  else {
    cout << -1 << '\n';
  }
  return 0;
}
