Для решения этой задачи можно использовать метод динамического программирования. Создадим массив dp размером 49 (48 + 1), где dp[i] будет хранить количество способов оплатить сумму i. Изначально все элементы массива будут равны 0, кроме dp[0], которое будет равно 1.
Затем пройдемся по каждому номиналу монеты и для каждого номинала обновим значения массива dp следующим образом: для каждой суммы i от номинала монеты до 48 (включительно) прибавим к dp[i] значение dp[i - номинал], таким образом учитывая все возможные комбинации оплаты.
В итоге, значение dp[48] будет содержать количество способов оплатить покупку стоимостью 48 унций с помощью данных монет.
Применяя этот подход к данной задаче, получим следующий код на Python:
```python
dp = [0] * 49
dp[0] = 1
nominals = [1, 2, 3, 4, 6, 12]
for nominal in nominals:
for i in range(nominal, 49):
dp[i] += dp[i - nominal]
print(dp[48])
```
Ответом будет значение dp[48], то есть количество способов оплатить покупку стоимостью 48 унций монетами заданных номиналов.