Submodularity: Theory and Applications