I am not sure why you need a dynamic number of columns, since there are always 12 months of the year. Also your monthly names seem a bit inconsistent in length.
Example result set:
SELECT * FROM (SELECT 'A' [PERSON],'JAN' [MONTH],'10' [PAID] UNION SELECT 'A','FEB',20 UNION SELECT 'B','JAN',10 UNION SELECT 'B','FEB',20 UNION SELECT 'B','SEP',30 UNION SELECT 'C','JAN',10 UNION SELECT 'C','JUNE',20 UNION SELECT 'C','JULY',30 UNION SELECT 'C','SEP',40) AS A PIVOT (SUM([PAID]) FOR [MONTH] IN ([JAN],[FEB],[MARCH],[APRIL],[MAY],[JUNE],[JULY],[AUG],[SEP],[OCT],[NOV],[DEC])) p
Against your table, this would be:
SELECT [PERSON],[MONTH],[PAID] FROM [YOURTABLE] PIVOT (SUM([PAID]) FOR [MONTH] IN ([JAN],[FEB],[MARCH],[APRIL],[MAY],[JUNE],[JULY],[AUG],[SEP],[OCT],[NOV],[DEC])) p
If you add the year column, it will look like this:
SELECT * FROM (SELECT 'A' [PERSON],'JAN' [MONTH],'10' [PAID], 2011 [YEAR] UNION SELECT 'A','FEB',20, 2011 UNION SELECT 'B','JAN',10, 2011 UNION SELECT 'A','FEB',20, 2010 UNION SELECT 'B','JAN',10, 2010 UNION SELECT 'B','FEB',20,2011 UNION SELECT 'B','SEP',30,2011 UNION SELECT 'C','JAN',10,2011 UNION SELECT 'C','JUNE',20,2011 UNION SELECT 'C','JULY',30,2011 UNION SELECT 'C','SEP',40,2011) AS A PIVOT (SUM([PAID]) FOR [MONTH] IN ([JAN],[FEB],[MARCH],[APRIL],[MAY],[JUNE],[JULY],[AUG],[SEP],[OCT],[NOV],[DEC])) p