package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

const INF = -1 << 30 // 表示不可达

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	// 读取 E_req, M_budget, n
	nextInt := func() int {
		scanner.Scan()
		x, _ := strconv.Atoi(scanner.Text())
		return x
	}

	E_req := nextInt()
	M_budget := nextInt()
	n := nextInt()

	// 存储媒介
	media := make([][2]int, n) // [E_i, M_i]
	for i := 0; i < n; i++ {
		E_i, M_i := nextInt(), nextInt()
		media[i] = [2]int{E_i, M_i}
	}

	// DP: dp[m] = 消耗恰好 m 法力时能获得的最大能源
	dp := make([]int, M_budget+1)
	for i := range dp {
		dp[i] = INF
	}
	dp[0] = 0 // 不选任何媒介,能源为0

	// 0-1背包
	for _, med := range media {
		E_i, M_i := med[0], med[1]
		// 逆序遍历,避免重复选择
		for m := M_budget; m >= M_i; m -= 10 {
			if dp[m-M_i] != INF {
				if dp[m] < dp[m-M_i]+E_i {
					dp[m] = dp[m-M_i] + E_i
				}
			}
		}
		/*
		   特性	        逆序(从大到小)	      正序(从小到大)
		   物品使用次数    最多一次(0-1背包)	     可多次使用(完全背包)
		   依赖状态	  未被本轮更新的旧状态	   可能已被本轮更新的新状态
		*/
	}

	// 寻找最优解
	minMana := M_budget + 1 // 初始化为不可达
	maxEnergy := 0

	for m := 0; m <= M_budget; m += 10 {
		if dp[m] >= E_req { // 满足魔力能源
			if m < minMana { // 更少的法力消耗
				minMana = m
				maxEnergy = dp[m]
			} else if m == minMana && dp[m] > maxEnergy { // 相等法力消耗下,更多魔力能源
				maxEnergy = dp[m]
			}
		}
	}

	// 输出结果
	if minMana > M_budget { // 法力不足
		fmt.Println("0 0")
	} else {
		fmt.Println(minMana, maxEnergy)
	}
}