1. A method for multilevel programming flash memory cells of a three dimensional array of flash memory cells, the method comprising: receiving or determining a multiple phase programming scheme that is responsive to coupling between flash memory cells of the three dimensional array; and programming data to multiple flash memory cells of the three dimensional array in response to the multiple phase programming scheme; wherein the multiple phase programming scheme determine a manner in which multiple programming levels are applied; wherein at least two programming levels of the multiple programming levels correspond to bits of different significance; wherein the three dimensional array comprises multiple planes of flash memory cells, each plane comprise multiple rows and columns of flash memory cells; and wherein the multiple phase programming scheme determines an order of programming pages, wherein the order of programming pages is responsive to coupling between flash memory cells that belong to different planes.