Custom pages are stored in the table qa_pages, so you should be able to fetch them like this:
SELECT pageid, title, tags, heading FROM qa_pages;
and then construct the list from that information.
For pagination you'd modify the query to limit the returned results:
SELECT pageid, title, tags, heading FROM qa_pages LIMIT start, end;
where you calculate start as (list_page_index - 1) * items_per_page and end as start + items_per_page.
Example: if you display 20 pages per list page you'd calculate start and end for the third list page like this:
start = (3 - 1) * 20 = 40
end = 40 + 20 = 60
The query will then give you the custom pages from rows 41 through 60.
The total number of rows in the table can be determined like this:
SELECT COUNT(*) FROM qa_pages;
so that you can calculate the number of list pages as row_count / items_per_page.