Finding Optimal Solutions to Cooperative Pathfinding Problems