```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var n, k int
fmt.Fscan(reader, &n, &k)
b := make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &b[i])
}
var c string
fmt.Fscan(reader, &c)
w := []int{}
o := []int{}
r := []int{}
for i := 0; i < n; i++ {
switch c[i] {
case 'W':
w = append(w, b[i])
case 'O':
o = append(o, b[i])
case 'R':
r = append(r, b[i])
}
}
sort.Slice(w, func(i, j int) bool { return w[i] > w[j] })
sort.Slice(o, func(i, j int) bool { return o[i] > o[j] })
sort.Slice(r, func(i, j int) bool { return r[i] > r[j] })
pw := make([]int, len(w)+1)
for i := 1; i <= len(w); i++ {
pw[i] = pw[i-1] + w[i-1]
}
po := make([]int, len(o)+1)
for i := 1; i <= len(o); i++ {
po[i] = po[i-1] + o[i-1]
}
pr := make([]int, len(r)+1)
for i := 1; i <= len(r); i++ {
pr[i] = pr[i-1] + r[i-1]
}
ans := -1
low := max(1, k-len(o))
high := min(k-1, len(w))
for i := low; i <= high; i++ {
val := pw[i] + po[k-i]
if val > ans {
ans = val
}
}
low = max(1, k-len(o))
high = min(k-1, len(r))
for i := low; i <= high; i++ {
val := pr[i] + po[k-i]
if val > ans {
ans = val
}
}
fmt.Fprintln(writer, ans)
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
```