Непонятно что плохого в том что много, перечислить через запятую проблема то. А так можно было бы увидеть html чтобы понять.
Для работы for на сколько помнится id у чекбоксов указывать придется, а если убрать id тогда label не будет отправлять на чекбокс. И тогда единственное что получится сделать это
.pay:checked ~ [for="payt4"]:before {
background:#d9d9d9;
color: #333;
}
а раз их много то
.pay:checked ~ [for="payt3"]:before ,
.pay:checked ~ [for="payt4"]:before {
background:#d9d9d9;
color: #333;
}
можно рискнуть и попробовать
.pay:checked ~ label:before, {
background:#d9d9d9;
color: #333;
}
или
.pay:checked ~ label[for]:before, {
background:#d9d9d9;
color: #333;
}
Только для каждого .pay и label будет нужен какой-нибудь блок, чтобы они не влияли на друг друга или последующие блоки